QT5 Qstring转换成char *

qml前端通常传输过来的都是Qstring,但是c++使用的一般是char*。
下面提供方法实现Qstring转换成char *

1.如果没有中文,直接使用

Qstring qStr;
char* ch = NULL;
QByteArray ba = qStr.toLocal8Bit();
ch=ba.data();

2.如果含有中文,需要设置编码

Qt5之前版本:

#include
//下面代码需要写进函数中
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

注意:Qt5之后,Qstring转换成char*不用三个了,只需要一个,另外两行代码会报错。

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后执行下面代码即可:

Qstring qStr;
char* ch = NULL;
QByteArray ba = qStr.toLocal8Bit();
ch=ba.data();

3.如果需要转换成string

如果需要把Qstring转换成string,使用下面代码:

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

注意:这里的char*是const格式的,作为一些函数的参数传输会报错。

4.一个不是问题的问题

转换后的ch在debug的时候看到的是乱码,但是并不影响,你可以尝试使用cout输出就会发现输出的中文没问题。

下面展示了我的代码使用debug进行监视的时候显示乱码,但是使用cout或者printf打印正常的现象。
text:Qstring传入的值
QT5 Qstring转换成char *_第1张图片

打印显示正常:
QT5 Qstring转换成char *_第2张图片

你可能感兴趣的:(qt,c++)