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

搞定!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM