900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Qt实现中英文切换(国际化)

Qt实现中英文切换(国际化)

时间:2020-05-02 01:17:25

相关推荐

Qt实现中英文切换(国际化)

前言

距离上一次发博客,已经又快一个月过去了,今天写一篇有关于Qt程序如何实现中英文切换的例子,之所以写这个,是因为这是最近项目的一个需求。Qt国际化,网上的例子,很多很多.... 看似很简单,但是真正去做的时候,总是会遇到各种各样的问题,说实话,挺让人头疼的。今天,把自己遇到的一些问题,分享一下,当做笔记,记录一下;要是也能帮助到你,那就太好啦~

一、Qt国际化具体步骤:

1、在项目文件(xxx.pro)中添加如下代码,(备注:en_tr.ts代表英文的文件,zh_tr.ts代表中文文件)

TRANSLATIONS += en_tr.ts \zh_tr.ts

2、生成.ts文件

说明:.ts文件的生成,有2种方式,分别如下:

a、在Qt Creator中,依次点击:工具→外部→Qt语言家→更新翻译(lupdate),具体如图所示:执行后,你会发现项目文件夹中多了2个ts文件。

b、找到Qt命令行工具(如图),打开,进入到你项目的文件目录,,然后输入命令:

lupdate -verbose xxx.pro,同样的,你会发现项目文件夹多了2个.ts文件;

3、翻译成指定语言,生成.qm文件

找到Qt语言家工具,翻译,翻译完后,点击保存,发布,这样就生成了.qm文件

同样的,发布的时候,也可以用命令lrelease xxx.pro

4、加载qm文件,load(),installTranslator()

按照以上的步骤来,就可以进行中英文切换了。

二、遇到的一些问题:

1、在生成.ts文件的时候,发现直接按照上述第一种方式,没有成功;

原因分析:应该是当初安装软件的时候,环境没有装好吧,这个目前没有深入的去分析,后续找到原因会更新~

解决方法:改用上述方式二

2、涉及到一些new 生成的变量啥的,没有被正确的中英文化。

原因分析:这个还没真没有找到原因。

解决方法:在changeEvent函数中,重新setText();【此处:感谢罗大佬~】

void xxx::changeEvent(QEvent *e){if(e->type() == QEvent::LanguageChange){//这里重新写一次setText//比如: ui->tabWidget->setTabText(1,tr("系统设置"));ui->retranslateUi(this);}}

三、根据系统语言,确定初始语言:

代码如下:

#include "mwidget.h"#include "login.h"#include <QApplication>#include <QLocale>#include <QTranslator>int main(int argc, char *argv[]){QApplication a(argc, argv);QTranslator translator;QLocale locale;if( locale.language() == QLocale::English ) //获取系统语言环境{qDebug() << "English system" ;translator.load(":/res/en_tr.qm");a.installTranslator(&translator);}else if( locale.language() == QLocale::Chinese ){qDebug() << "中文系统";translator.load(":/res/zh_tr.qm");a.installTranslator(&translator);}Login login;login.show();return a.exec();}

四、一些建议:

1、用于中英文切换的字符串,控件啥的,在代码中,尽量用中文显示。这样做,是为了减少乱码的可能性。

五、后记:

嗯,好像写得不够详细,后面有空了,上个例子吧。如果还有疑问的小可爱们,可以先参考下别的博客,或者欢迎留言呀~

嗯,最后感谢路遇的大佬!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。