windows中的QT项目移植到linux下出现中文乱码问题

来源:互联网 发布:唾液可以杀菌消炎 知乎 编辑:程序博客网 时间:2024/04/27 21:27

众所周知QT具有很好的移植性,今天正好闲的蛋疼,把一个windows上的界面程序移植到了linux下,于是发现了中文乱码问题,windows中的效果图:
windows下的运行结果
linux下的效果图:
linux下的运行结果
出现了中文乱码问题233333333

通过查阅资料【1】【2】发现,需要在linux端的代码稍作修改
ie 在main中添加如下代码:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");    QTextCodec::setCodecForTr(codec);    QTextCodec::setCodecForLocale(codec);    QTextCodec::setCodecForCStrings(codec);

此时问题完美解决。
但是这段话在我们的windows中编译时遇到了错误:
setCodecForTr 和 setCodecForCStrings消失了23333333

经过思考发现,问题的本质在于,我们windows中的qt用的是5.2版本
而在qt5中已经取消了setCodecForTr 和 setCodecForCStrings函数了【3】
而我们的linux中所用的qt还是默认安装版本qt4的,qt5中tr()默认utf8编码,而qt5之前的版本都是默认latin-1编码的,也就是说尽管我们的源文件都是utf8的,但在make的时候tr()中的字符自动被解释成了拉丁字符,从而造成了中文乱码的问题,因而需要显示声明一下所用的字符集为utf8.

ps:可以通过which查看linux下qmake 的存放路径(原谅我是新手)

参考文献:

1.linux下,Qt无法显示中文 http://www.itjie.wang/qt/62082.html
2.【Qt移植到linux】问题7 qt界面无法输入中文,中文不显示,乱码等问题 http://blog.163.com/qimo601@126/blog/static/15822093201382611615112/
3.QTextCodec中的setCodecForTr等终于消失了 (Qt5) http://idas643.blog.163.com/blog/static/167104838201312345727951/

0 0
原创粉丝点击