QT5.10 QString 在comboBox中显示乱码

chinanoahli 2018-01-09 03:04:39
编写一个带ANSI文本读写功能的QT小程序,小程序带comboBox,comboBox的内容根据txt文本来自动生成。

已经成功读取文件并将读取到的内容并直接输出到终端中,或者将储存读取内容的QStringList打印到终端中,都没有乱码现象发生。但是到了comboBox上显示就乱码了。

搜索过挺多内容,都没有解决,希望得到指点。

config.txt

新版
旧版


与对应功能相关的代码

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


效果图
...全文
4226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧洛 2018-03-12
  • 打赏
  • 举报
回复
把你的config.txt文件用UTF-8格式保存
Acuity. 2018-02-06
  • 打赏
  • 举报
回复
同一用utf-8编码格式,不管是编码还是显示内容。可以避免很多乱码的情况。
phelps_zzg 2018-02-05
  • 打赏
  • 举报
回复
这个问题是由于可执行文件的编码格式和Qt控件编码格式不一致引起。msvc编译器缺省把你的代码中的字符串编译为UTF-16LE格式,而Qt控件缺省默认你的字符串是utf8格式,所以显示的时候就出现了乱码。如果是gcc编译器缺省把字符串编译成utf8就没有问题。 解决办法就是两种,一种把Qt控件字符串处理格式设置为UTF-16LE。 第二种就是在编译选项上指示编译器把字符串编译成utf8格式: QMAKE_CXXFLAGS += -execution-charset:utf-8 或者用MS预编译指令:#pragma execution_character_set("utf-8") 把这条指令放在乱码字符串定义的源文件头部即可
donwmufromdying 2018-02-05
  • 打赏
  • 举报
回复
如果是vs2015的windows环境下,打开两个编译选项试试: msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8 msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
一小猿 2018-02-05
  • 打赏
  • 举报
回复
QString中存储的是unicode编码字符。而控制台输出一般是本地编码,在windows中文上通常是GBK编码,所以要用readLine.toLocal8Bit().constData()来转换一下编码。但在向combobox中增加时就不用再做这个转换了。也就是把verSelector->insertItem(i, tr( verList.at(i).toLocal8Bit().constData() ));改为verSelector->insertItem(i, tr( verList.at(i))。楼主可以试试。
谁吃薄荷糖 2018-02-02
  • 打赏
  • 举报
回复
解决qt中文乱码: 1.在main函数中添加“QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));”代码,并添加 #include <QTextCodec> 头文件。 2.使用QStringLiteral宏。使用QStringLiteral来修饰中文字符串即可。它可以直接生成Unicode字符串保存在可执行文件中的只读区域。这样运行时不会发生任何转换。可以显著提高程序运行效率。  3.使用文本编辑器以“utf-8”的编码格式打开代码文件,并保存,从而使代码文件的编码格式为utf-8格式。 代码如下: #include <QCoreApplication> #include <QDebug> #include <QTextCodec> // for 中文显示 int main(int argc, char *argv[]) { QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8")); // 显示中文 便于跨平台 utf-8字符 QCoreApplication a(argc, argv); qDebug() << QStringLiteral("中文"); qDebug() << str_ascii; return a.exec(); }
马丁陈 2018-01-12
  • 打赏
  • 举报
回复
看了下图,的确很有可能是编码混乱的问题
Marcelxx 2018-01-12
  • 打赏
  • 举报
回复
文本编码的问题吧

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧