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);
搞定!