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())); }
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值