String和QString之间的转化可以按照如下进行:
QString qstr;
string str;
str = qstr.toStdString();
qstr = QString::fromStdString(str);
但是这样会出现中文乱码的问题,可以按照如下进行处理:
std::string cstr;
QString qstring;
//从std::string 到QString
qstring = QString(QString::fromLocal8Bit(cstr.c_str()));
//从QString 到 std::string
cstr = string((const char *)qstring.toLocal8Bit());
//不需要从gbk转到utf8
QString value_content = QString::fromStdString(vec[i].content);
QString value_classname = QString::fromStdString(vec[i].classname);
而QString
只有在数据是文本的时候才能使用,而不是二进制的,非ASCII字符将通过QString::toAscii()被转换为'?'
QByteArray转QString需要注意的一个问题
- QString类提供Unicode字符串。
- QByteArray类提供存放二进制数据。
QByteArray byteArray;
byteArray += '1';
byteArray += '2';
byteArray += '\0';
byteArray += '3';
byteArray += '4';
QString str(byteArray);
看似上面代码没问题,但实际上并不能得出我们想要的结果。
str的内容是"12",而"\034"被剪掉了。于是找了下QString的说明文档,看到QString字符串的结尾和C风格的’\0’或0结尾相同。
QbyteArray转为qstring可以用
QByteArray qbyte = filein.readAll();
QString qstr = QString::fromLatin1(qbyte, qbyte.size());
QString转换成QByteArray
1、用toLocal8Bit();
2、用toLatin1()类虽然可以转换,但是遇到中文,显示?????。
3、在QJsonDocument中如果用toLocal8Bit会出现IllegalUTF8String,用一下方法可以解决:
QJsonDocument::fromJson(byteArray.toStdString().data(), &jsonError);
从Qt 5.4开始,通过和QByteArray
建立了对std::string
转换
/*之前*/
// std::string => QByteArray
QByteArray byteArray(stdString.c_str(), stdString.length());
// QByteArray => std::string
std::string stdString(byteArray.constData(), byteArray.length());
/*现在*/
inline std::string QByteArray::toStdString() const
{ return std::string(constData(), length()); }
inline QByteArray QByteArray::fromStdString(const std::string &s)
{ return QByteArray(s.data(), int(s.size())); }