QT QString 在comboBox中显示乱码?

首先,我用的平台是windows10,目标机器是xp。
我在写一个需要兼容 ANSI 编码的QT小程序的时候,遇到了比较奇怪的问题。
首先,代码读取文件,储存到QStringList再输出到控制台或读取后直接输出到控制台都是没问题的,但是在窗口中显示却是乱码。

下面列出相关文件和代码


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开发的大佬指教……
谷歌查了很多都还没有解决。

阅读 5.4k
1 个回答

你貌似有一件事搞反了。

文件是ANSI编码,这其实就是 Windows 的 System' local encoding 了。那么你从 ANSI 读到 QString 的过程,不是 toLocal8Bit,而是 fromLocal8Bit

搞明白这件事,乱码问题就迎刃而解了。

QString readLine = configFile.readLine();

改为:

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题