Qt下面,字符串都用QString,确实给开发者提供了方便,想一想VC里面定义的各类变量类型,并且函数参数类型五花八门,常常须要今年新那个类型转换函数
Qt再使用第三方开源库时,因为库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型测试
在Qt下怎样将QString转char*呢,须要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。编码
由于char*最后都有一个‘/0’做为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’spa
方法以下:code
Qstring str;开发
char* ch;文档
QByteArray ba = str.toLatin1(); 字符串
ch=ba.data();string
这样就完成了QString向char*的转化。经测试程序运行时不会出现bugit
注意第三行,必定要加上,不能够str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,可是QString内含有中文时,转换为char*就是乱码,采用以下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
而后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,而后将string转为char*,以下:
std::string str = filename.toStdString();
const char* ch = str.c_str();