QString 和 char* 之间的转换(以及QByteArray)

来源:互联网 发布:psvita 电池 淘宝 编辑:程序博客网 时间:2024/04/30 08:04

1.QString转char *

       方法1:

先将QString转换为QByteArray,再将QByteArray转换为char *。

注意:不能用下面的转换形式char *mm = str.toLatin1().data();。因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,最后转换,mm的值就为空。

    QString str = “hello”; //QString转char *      QByteArray ba = str.toLatin1();      char *mm = ba.data();

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:

添加GBK编码支持,使用函数toLocal8Bit ( ),

#include <QTextCodec>//QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));//然后改变上面的第2行为:QByteArray ba = str.toLocal8Bit();

       方法2:

先将QString转为标准库中的string类型(StdString),然后将string转为char*,如下:

std::string str = filename.toStdString();const char* ch = str.c_str();

此方法不支持中文!

2. char * 转QString

       方法1:

QString(const char *ch);

       方法2:

QString::fromLocal8Bit(chr, sizeof(chr));QString::fromLatin1(   chr, sizeof(chr));

      方法3:

可以使用QString的构造函数进行转换:
QString(const QLatin1String &str);
QLatin1String的构造函数:
QLatin1String(const char *str);
则如下语句是将char * mm转换为QString str:
QString str = QString(QLatin1String(mm));

方法4:

转为QByteArray,再转QString.

3.QByteArray

char* 转 QByteArray:
QByteArray ba(chr, sizeof(chr));

4.例子:

//#include "myclass.h"  #include <QtGui/QApplication>  #include <QtDebug>  #include <QString>    int main(int argc, char *argv[])  {      QApplication a(argc, argv);        QString str = “hello”; //QString转char *      QByteArray ba = str.toLatin1();      char *mm = ba.data();      qDebug()<<mm<<endl;  //调试时,在console中输出        QString nn = QString(QLatin1String(mm)); //char *转QString      qDebug()<<nn<<endl;  //调试时,在console中输出        //MyClass w;      //w.show();      return a.exec();  }/*******************************************QString和QByteArray提供了非常便利的operator+,以允许你写这样的代码:QString directory = /*...*/, name = /*...*/;QString dataFile = directory + QLatin1Char('/') + name + QLatin1String(".dat");**********************************************/


                                             
0 0
原创粉丝点击