12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示

 

1.解决Win平台中文显示

1.1首先解决win平台上中文显示乱码问题

1)首先查看qt creator的编码格式

通过->编辑->选择编码 查看.

2)如果qt creator的编码格式是utf8,并且项目里的汉字是utf8类型时

需要添加头文件:

#include <QTextCodec>

在main()函数加入:

  QTextCodec *codec = QTextCodec::codecForName("utf8"); 

  QTextCodec::setCodecForTr(codec);

  QTextCodec::setCodecForLocale(codec);

  QTextCodec::setCodecForCStrings(codec);

3)如果qt creator的编码格式是GBK,并且项目里的汉字是GBK类型时

添加头文件:

#include <QTextCodec>

在main()函数加入:

  QTextCodec *codec = QTextCodec::codecForName("GBK"); //GBK gbk

  QTextCodec::setCodecForTr(codec);

  QTextCodec::setCodecForLocale(codec);

  QTextCodec::setCodecForCStrings(codec);

 

1.2 其次解决按钮、QLineEdit等编辑组件右击菜单等英文问题

如下图所示:

 

步骤:

1)搜索qt_zh_CN.ts ,找到位于: C:\Qt\4.7.4\translations\qt_zh_CN.ts

2)在开始程序里打开qt预言家(linguist.exe)

 

3)通过linguist.exe打开找到的qt_zh_CN.ts文件,进行翻译

如下图所示,发现都是大多翻译好了的:

 

上面表示该文件的tr("")字符串已被翻译完

接下来点击File->Release 生成翻译文件: qt_zh_CN.qm

4)再将qt_zh_CN.qm放到自己项目的资源文件里

5)在main函数里添加以下代码

//注意:必须要放在QApplication a(argc, argv);后面处,因为下面代码要初始化这个对象
QTranslator *trans = new QTranslator;
trans->load(":/res/qm/qt_zh_CN.qm"); 
QCoreApplication::installTranslator(trans);

 

6)测试效果

 

 

 

2.解决Linux平台中文显示

2.1解决乱码,无法打印中文

 有可能是qt配置界面的字体不支持中文

1)输入命令qtconfig

2)进入Qt配置界面,如下图所示,如果发现乱码,那就说明qt配置字体错了:

3)点击第2格,然后选择字体,只要能显示中文出来,便可以:

 

 

4.设置好后,退出并保存,然后运行自己写的记事本程序效果:

 

 

 

5)发现使用QPlainTextEdit编辑组件无法打出汉字

找到是输入法没有全局设置,输入命令ibus-setup,然后勾上全局设置:

 

PS:Linux下的中文输入法默认输入是UTF-8,所以需要保证qt creator编码格式也是UTF-8,否则输入中文会乱码

 

2.2其次解决按钮、QLineEdit等编辑组件右击菜单等英文问题

1)输入sudo find /  -name  qt_zh_CN*

 

从上图可以看到,qt已经为我们做好了qt_zh_CN.qm,然后将这个拷贝出来,加入到资源里

2)和Win平台一样,通过代码调用qt_zh_CN.qm

3)试验效果,发现按钮, QLineEdit右击菜单还是显示英文

4)使用qt预言家(linguist)从新发布试试

输入linguist,打开找到的qt_zh_CN.qm:

 

发现都是翻译好了的,那再次从新发布试试.

 

5)从新发布后,再次调用新发布的qt_zh_CN.qm,试验效果

发现ok了,如下图所示:

 

 

 

 

 如果需要项目文件在Win/Linux上都要运行

设置Qt Creator:

进入编辑->选择编码  ,选择UTF-8类型

进入工具->选项->文本编辑器->行为,选择UTF-8编码

在代码里只需要调用:

char s[]="utf-8";
QTextCodec::setCodecForTr(QTextCodec::codecForName(s));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(s));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(s));

就不再需要考虑,项目文件转编码问题了.


 

posted @ 2018-04-28 15:22  诺谦  阅读(3412)  评论(0编辑  收藏  举报