• 7197阅读
  • 7回复

[提问]为什么总是会出现中文乱码,不是主窗口就是子窗口 [复制链接]

上一主题 下一主题
离线fourdegree
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-28
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
    QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
    app.setStyleSheet("*{font:12px;}");
    MainWindow mainWin;
    mainWin.resize(800,600);
    mainWin.show();

这样主窗口乱码,但对弹出的子窗口QMessageBox、QDialog派生类都是乱码,请问如何解决?
离线liuchuanwen
只看该作者 1楼 发表于: 2011-04-28
你的环境是Linux对吗,不同的系统采样字符集是不同的?你主窗口中正常显示的文字是用tr()给的吗?QMessageBox、QDialog派生类用了tr()吗?如果问题没弄清楚,先把问题弄清楚。如果确实不行,给我发邮件我们再讨论
[ 此帖被liuchuanwen在2011-04-29 09:10重新编辑 ]
离线fourdegree
只看该作者 2楼 发表于: 2011-04-28
回 1楼(liuchuanwen) 的帖子
不是啊,我是windows7的,所有字符串我都加tr()的,我也换了好几种编码方式了,还是乱码。
如果这个写,子窗口中文显示正常,主窗口又乱码了,晕死……………………
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
离线dbzhang800

只看该作者 3楼 发表于: 2011-04-28
Re:回 1楼(liuchuanwen) 的帖子
引用第2楼fourdegree于2011-04-28 17:54发表的 回 1楼(liuchuanwen) 的帖子 :
不是啊,我是windows7的,所有字符串我都加tr()的,我也换了好几种编码方式了,还是乱码。
如果这个写,子窗口中文显示正常,主窗口又乱码了,晕死……………………
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

先搞清楚基本概念再说吧。
http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html

看你代码中 QTextCodec::codecForLocale() 以及 utf8 都用上了,肯定就在胡乱尝试了。概念要清楚,解决起来,其实很简单的。
* 在windows下,感觉你不可能是 utf8,最可能就是gb18030(但你提供的信息太少)。
*  QTextCodec::codecForLocale() 应该能工作,但是,你要知道它意味着什么。意味着你的程序只能在简体中文的windows下不乱码。

题外:不建议直接使用中文,不妨考虑Qt提供的国际化功能。
离线xhybba

只看该作者 4楼 发表于: 2011-04-28
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8");
离线liuchuanwen
只看该作者 5楼 发表于: 2011-04-29
如果中文用得不是很多,你可以用QTextCodec::toUnicode()

你确实要把你的问题先清楚。主窗口做法和子窗口做法是不是一样。
离线fourdegree
只看该作者 6楼 发表于: 2011-04-29
回 3楼(dbzhang800) 的帖子
我的开发环境是windows7 32位简体中文版+mingw-g++
应该怎么做才能解决乱码?我明白QTextCodec::setCodecFor……()的作用,可是还是不行。
这样主窗口出现乱码:
   QApplication app(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    app.setStyleSheet("*{font:12px;}");
    MainWindow mainWin;
    mainWin.resize(800,600);
    mainWin.show();
离线XChinux

只看该作者 7楼 发表于: 2011-04-30
方法:
1、main()函数中加入下面一句话:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
2、所有的头文件和CPP文件,全部用GBK编码(看你自己使用的代码编辑器,如何设置)

如dbzhang800所述,最好使用Qt的国际化支持吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个