QString、Qbytearray、string的相互转换及相关问题

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())); }

你可能感兴趣的:(QT学习)