Qt char*, string, int与QString型字符串的转换
(1)将QString转换为char *
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
1 Qstring str; 2 char* ch; 3 QByteArray ba = str.toLatin1(); 4 ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
1 #include <QTextCodec> 2 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 3 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
1 QString qstr; 2 std::string str = qstr.toStdString();//QString转换为string 3 const char* ch = str.c_str();
注意:c_str函数的返回值是const char*的,不能直接赋值给char*
(2)把char*转换为QString。
最为方便的做法是以一个QLatin1String对象作为参数,来调用QString的构造函数。
示例:
1 const char *cstr; 2 QString qstr= QString(QLatin1String(cstr));
(3)把string转换为QString.
1 std::string str="hello"; 2 QString qstr = QString(QString::fromLocal8Bit(str.c_str()));//string向QString转换
(4)int(float)型转化为QString型
方法一:
1 long a = 63; 2 QString s = QString::number(a, 10); // s == "63" 3 QString t = QString::number(a, 16).toUpper(); // t == "3F"
(解释,变量a为int型或者float,double。10和16为进制) toUpper是大写
方法二:
1 long a = 63; 2 QString s = QString("%1").arg(a);