鍍金池/ 問答/Python  C++/ QT QString 在comboBox中顯示亂碼?

QT QString 在comboBox中顯示亂碼?

首先,我用的平臺是windows10,目標機器是xp。
我在寫一個需要兼容 ANSI 編碼的QT小程序的時候,遇到了比較奇怪的問題。
首先,代碼讀取文件,儲存到QStringList再輸出到控制臺或讀取后直接輸出到控制臺都是沒問題的,但是在窗口中顯示卻是亂碼。

下面列出相關(guān)文件和代碼


config.txt ANSI編碼

新版
舊版

在QT項目中的代碼

QStringList verList;

QFile configFile ("config.txt");
if(configFile.open(QFile::ReadOnly | QIODevice::Text)) {
    while (!configFile.atEnd()) {
        QString readLine = configFile.readLine();
        std::cout << readLine.toLocal8Bit().constData();
        verList << readLine;
    }
}

std::cout << std::endl;

for (int i = 0; i < verList.size(); i++) {
    std::cout << verList.at(i).toLocal8Bit().constData();
}
……
……
verSelector = new QComboBox(this);
verSelector->setEditable(false);
for (int i = 0; i < verList.size(); i++) {
    verSelector->insertItem(i, tr( verList.at(i).toLocal8Bit().constData() ));
}

圖片描述


還請熟悉QT開發(fā)的大佬指教……
谷歌查了很多都還沒有解決。

回答
編輯回答
巫婆

你貌似有一件事搞反了。

文件是ANSI編碼,這其實就是 Windows 的 System' local encoding 了。那么你從 ANSI 讀到 QString 的過程,不是 toLocal8Bit,而是 fromLocal8Bit。

搞明白這件事,亂碼問題就迎刃而解了。

QString readLine = configFile.readLine();

改為:

QString readLine = QString::fromLocal8Bit(configFile.readLine());

把后面那些 toLocal8Bit 都給去掉就行了。

2018年8月31日 15:10