QString 与 std::string 的相互转换方法
Visual Studio 2017 + Qt5.12.0
下面这段代码Release下编译运行都没问题,但Debug模式下运行报错,程序崩溃:
std::string a("abc"); QString b = QString::fromStdString(a);
试了半天也没找到一个通用的办法,于是根据网上的指导,根据字符串定义时的原始类型,找到了一种根据原始类型判断互转的办法:
//QString to std::string QString qs_original("ab中国cd"); std::string str = qs_original.toUtf8().constData(); QString qs_recovered = QString::fromUtf8(QByteArray::fromRawData(str.c_str(), str.size())); //std::string to QString std::string str_original("ab中国cd"); QString qs = QString::fromUtf8(QByteArray::fromRawData(str_original.c_str(), str_original.size())); std:string str_recovered = qs.toLocal8Bit().constData();
经试验,与QString 转换过程中 utf-8 显示可能为乱码,Local8Bit 不会有乱码,所以有以下方法:
void stdString2QString(std::string str, QString &qs) { qs = QString::fromLocal8Bit(QByteArray::fromRawData(str.c_str(), str.size())); } void QString2stdString(QString qs, std::string &str) { str = qs.toLocal8Bit().constData(); }
测试代码如下:
std::string str("ab中国cd"); QString qs; stdString2QString(str, qs); std::string str2; QString2stdString(qs, str2);
搞定!
桂棹兮兰桨,击空明兮溯流光。