2D绘图部分基本告一段落,还在想下面的部分要写什么,本来计划先说下view-model的相关问题,但是前面看到有朋友问关于国际化的问题,所以现在先来说说Qt的国际化吧!
Qt中的国际化的方法有很多,常用的有使用QTextCodec类和使用tr()函数。前者将编码名称写到代码里面,除非你使用Unicode
编码,否则国际化依然是一个问题;后者就不会有这个问题,并且这也是Qt推荐的做法。因此,我们主要来说使用tr()函数的方法进行应用程序的国际化。
我们先来看一个很简单的MainWindow。为了清楚起见,这里只给出了cpp文件的内容:
#include
"mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *menuBar =
new
QMenuBar(
this
);
QMenu *fileMenu =
new
QMenu(tr(
"&File"
), menuBar);
QAction *newFile =
new
QAction(tr(
"&New..."
), fileMenu);
fileMenu->addAction(newFile);
QAction *openFile =
new
QAction(tr(
"&Open..."
), fileMenu);
fileMenu->addAction(openFile);
menuBar->addMenu(fileMenu);
setMenuBar(menuBar);
connect(openFile, SIGNAL(triggered()),
this
, SLOT(fileOpen()));
}
MainWindow::~MainWindow()
{
}
void
MainWindow::fileOpen()
{
QFileDialog *fileDialog =
new
QFileDialog(
this
);
fileDialog->setWindowTitle(tr(
"Open File"
));
fileDialog->setDirectory(
"."
);
if
(fileDialog->exec() == QDialog::Accepted) {
QString path = fileDialog->selectedFiles()[0];
QMessageBox::information(NULL, tr(
"Path"
), tr(
"You selected\n%1"
).arg(path));
}
else
{
QMessageBox::information(NULL, tr(
"Path"
), tr(
"You didn't select any files."
));
}
}
这是一个很简单的类,运行结果想必大家也都非常清楚:就是一个主窗口,上面有一个菜单栏,一个File菜单,里面有两个菜单项:
之所以把运行图贴出来,是为了大家能够看清,在代码中的&符号实际在界面中显示成为一条下划线,标记出这个菜单或者菜单项的快捷键。按照代码,当我们点击了Open时,会弹出一个打开文件的对话框:
这里的slot里面的代码在前文中已经详细介绍过。也许你会问,为什么要用这种麻烦的写法呢?因为我们曾经说过,使用static函数实际上是直接调用系统的对话框,而这种构造函数法是Qt自己绘制的。这对我们后面的国际化是有一定的影响的。
好了,都已经准备好了,下面开始进行国际化。所谓国际化,实际上不仅仅是把界面中的各种文字翻译成另外的语言,还有一些工作是要进行书写方式、
货币等的转换。比如,阿拉伯书写时从右向左的,这些在国际化工作中必须完成。但是在这里,我们只进行最简单的工作,就是把界面的文字翻译成中文。
首先,我们需要在pro文件中增加一行:
TRANSLATIONS += myapp.ts
myapp.ts是我们需要创建的翻译文件。这个文件的名字是任意的,不过后缀名需要是ts。然后我们打开命令提示符,进入到工程所在目录,比如我的是E:\My Documents\Workspace\Qt\MyApp,也就是pro文件所在的文件夹,然后输入命令
lupdate MyApp.pro
,如果你出现的是命令不存在,请注意将Qt的bin目录添加到环境变量中。此时,如果更新的数目,说明ts文件创建成功:
最后一行是说,找到7个需要翻译的原文字,0个已经存在。也就是说,这个文件是新建的。这时你会在工程目录下找到这个myapp.ts文件。也
许你会奇怪,为什么这里还会说已存在的数目呢?因为Qt这个工具很智能的能够识别出已经存在的文字和修改或新增的文字,这样在以后的工作中就不需要一遍遍
重复翻译以前的文字了。这也就是为什么这个工具的名字是“lupdate”的原因,因为它是“update”,而不仅仅是生成。
如果你有兴趣的话,可以用记事本打开这个ts文件,这个文件实际上是一个XML文件,结构很清晰。不过,我们要使用专业的翻译工具进行翻译。
Qt提供了一个工具,Qt Linguist,你可以在开始菜单的Qt项下面的Tools中找到。用它可以打开我们的ts文件,然后进行我们的翻译工作:
完全翻译完成后保存文件,然后在文件菜单下有个“发布”。点击这个按钮,工程目录下会有一个myapp.qm文件,这就是我们翻译得到的文件。Qt的qm文件实际上是二进制格式的,因此它经过了高度的优化,体积很小。
下面我们要修改main()函数,使之加载这个qm文件:
int
main(
int
argc,
char
*argv[])
{
QApplication a(argc, argv);
QTranslator qtTranslator;
qtTranslator.load(
"myapp.qm"
);
a.installTranslator(&qtTranslator);
MainWindow w;
w.resize(800, 600);
w.show();
return
a.exec();
}
注意,QTranslator类实际是在QtCore下面的。代码还是很清晰:创建一个QTranslator对象,然后加载qm文件,然后将这个对象安装到QApplication类。好了,现在大功告成,重新编译后运行下程序吧!
咦?怎么还是英文的?哪里有错误了呢?这里往往令人疑惑,其实,这是由于我们使用load()函数加载qm文件时使用的是相对路径,这样直接
load(“myapp.qm”),其实会在当前编译后的exe所在目录下寻找这个qm文件,所以,只要我们把qm文件同exe放在同一目录下,再次运
行:
现在,这个界面已经是中文了吧!其实,这一小细节已经说明,qm文件其实是动态加载到exe文件中的,而不是直接编译进去的。这一点为我们进行动态切换语言提供了基础。
本文出自 “豆子空间
” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/244689
分享到:
相关推荐
Qt国际化教程
该资料详细讲解了以下内容: 1:Qt5的介绍 2:Qt5开发及实例 3:Qt5布局管理 4:Qt5基本对话框 5:Qt5主窗体 6:Qt5图形与图画 ...14:Qt5多国语言国际化 15:Qt5单元测试框架 每个章节都配了详细的例子程序
Qt学习资料,提供了各个章节的ppt、代码,供初学者学习,具体如下 第1章 Qt概述 第2章 Qt 5模板库、工具 第3章 Qt 5布局管理 第4章 Qt 5基本对话框 第5章 Qt 5主窗体 第6章 Qt 5图形与图片 第7章 Qt 5图形视图框架 ...
QT国际化(动态翻译),需要做qt的多语言版本软件时候可以参考,从别人转载的,方便自己备份,也方便大家学习,共同进步,不喜勿喷!
关于Qt Qt的版本 常见问题解答 Window系统特性注释 如何购买Qt 安装 如何学习Qt 教程一, 教程二 实例 循序渐进实例 ...国际化(i18n) 调试技术 Qt中的线程支持 Qt插件 窗口部件快照
第一部分:QT基础 第一章.开始学习 第二章.创建对话框 第三章....第四章....第五章....第二部分:中级QT ... 第十七章:国际化 第十八章:多线程 第十九章:制作插件 第二十章:基于平台的特性 第二十一章:嵌入式程序
国际化(i18n) 调试技术 Qt中的线程支持 Qt插件 窗口部件快照 Trolltech 工具 附录 关于Trolltech公司 如何报告bug 邮件列表信息 所有的工具 Qt设计器 Qt语言学家 Qt助手 qmake 标准快捷键 Q公共...
值得一提的是,《Qt Quick核心编程》覆盖了Android开发的多个主题,如拍照、定位、录音、国际化、可伸缩界面等,也是使用Qt Quick进行移动开发不可错过的。, 《Qt Quick核心编程》的读者对象为:希望学习一门高效的...
第五部分——改善程序性能,介绍Qt程序的国际化、移植、调试等问题,以及怎样使用构造程序简单快捷地创建图形界面。附录部分给出了每章测验题答案和常用的Qt类描述。全书分为24个学时,每一学时内容均以前一学时为...
\第20章 国际化 468 \20.1 Unicode与字符编码 468 \20.1.1 Unicode 468 \20.1.2 汉字编码 469 \20.1.3 编码转换 469 \20.2 Qt Linguist 471 \20.2.1 发布管理器 472 \20.2.2 翻译器 474 \20.2.3 加载翻译文件 476 \...
改善程序性能,介绍Qt程序的国际化、移植、调试等问题,以及怎样使用构造程序简单快捷地创建图形界面。附录部分给出了每章测验题答案和常用的Qt类描述。全书分为24个学时,每一学时内容均以前一学时为基础。
\第20章 国际化 468 \20.1 Unicode与字符编码 468 \20.1.1 Unicode 468 \20.1.2 汉字编码 469 \20.1.3 编码转换 469 \20.2 Qt Linguist 471 \20.2.1 发布管理器 472 \20.2.2 翻译器 474 \20.2.3 加载翻译...
值得一提的是,《Qt Quick核心编程》覆盖了Android开发的多个主题,如拍照、定位、录音、国际化、可伸缩界面等,也是使用Qt Quick进行移动开发不可错过的。, 《Qt Quick核心编程》的读者对象为:希望学习一门高效的...
第二和第三部分主要讲解Qt的中高级编程,包括布局管理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、XML、国际化、嵌入式编程等内容;第四部分为附录内容,分别介绍了Qt的...
用qt写的登录模块 实现了国际化 有语言包 纯代码 非常适合初学者学习
国际化(i18n) 调试技术 Qt中的线程支持 Qt插件 窗口部件快照 Trolltech 工具 附录 关于Trolltech公司 如何报告bug 邮件列表信息 所有的工具 Qt设计器 Qt语言学家 Qt助手 qmake 标准快捷键 Q公共...