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

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::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   
#include   
#include   
  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
  
    QString str = “hello”; //QString转char *  
    QByteArray ba = str.toLatin1();  
    char *mm = ba.data();  
    qDebug()<











你可能感兴趣的:(Qt)