版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、15.1 概念15.2 实例15.1.1QString、QTranslator等类和等类和tr()函数的作用函数的作用在支持国际化的过程中,一般在Qt中利用QString、QTranslator等类和tr()函数能够很方便的完成加入国际化的支持,具体工作如下:(1) 使用QString对象来表示所有用户可见的文本。(2) 使用tr()函数来取得所有需要翻译的文本。(3) 使用QString:arg()来组织动态文本。比如下面的字符串用来表示任务的完成情况:QString m = tr(“Mission status: “ )+ x + tr(“of “) + y +tr(”are comple
2、ted”);(4) 利用QTranslator:load()和QCoreApplication:installTranslator()来读取对应的翻译之后的资源文件。对于翻译工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease来协助翻译工作并生成最后需要的.qm文件,它包括以下内容:(1) 利用lupdate工具从源代码中扫描并提取需要翻译的字符串,生成.ts文件。类似编译时用到的qmake,运行lupdate时我们也需要指定一个.pro的文件,这个.pro文件可以单独创建,也可以利用编译时用到的.pro文件。(2) 利用linguist工具来协助完成翻译工作,即
3、打开前面用lupdate生成的.ts文件,对其中的字符串逐条进行翻译并保存。 (3) 利用lrelease工具处理翻译好的.ts文件,生成格式更为紧凑的.qm文件。这便是翻译工作者最终需要提供的资源文件,它所占的空间比.ts文件小,但基本不具有可读性,只有QTranslator能正确的识别它。5.2.1实例实例1(1) 新建一个GUI工程TestH,然后在UI文件上添加两个按钮,并分别把文本修改为hello、china,如图15.1所示。(2) 修改TestH文件,添加:TRANSLATIONS =TestHello.ts(3) 编译。假如没有编译而进行下面的步
4、骤,生成的ts文件只是一个只有标题栏的框架。(4) 编译完成后,假如是windows下就cmd ,假如是linux就开终端。单击“开始”-“所有程序”-“Qt SDK by Nokia V2010.03(Open Source)”-“Qt Commond Prompt”命令打开“Qt Commond Prompt”窗口,cd 进入TestH工程目录,执行命令:lupdate TestH 在工程下生成一个ts文件,假如没有编译的话,会提示Found 1 source text。假如编译后,会提示Found 3 source text,如图15.2所示。(5) 单击
5、“开始”-“所有程序”-“Qt SDK by Nokia V2010.03(Open Source)”-“Tools”-“Qt Linguist”命令,运行Qt自带工具Qt Linguist。 单击菜单“文件”“打开”命令,选择“TestHello.ts”文件,单击“打开”按钮,然后根据需要设置源语言和目标语言,此处为默认状态:源语言为任意国家语言,目标语言为china国家的chinese。(6) 在第二栏选择要翻译的字符串,在下面两行中输入对应的翻译文字,然后单击上面的 按钮。(7) 单击“File”“release”,或者在命令行输入“lrelease TestH”,生成T
6、estHello.qm文件,如图15.3所示。(8) 修改源代码。添加前,具体代码如下:int main(int argc, char *argv) QApplication a(argc, argv); MainWindow w;w.show();return a.exec();添加后,具体代码如下:#includeint main(int argc, char *argv) QApplication a(argc, argv);QTranslator*translator=newQTranslator;translator-load(./TestHello.qm);a.installTra
7、nslator(translator);MainWindow w;w.show();return a.exec();此实例是用一个下拉菜单来选择语言,然后下面有一个需要翻译文字的标签。(1) 在头文件LangSwitch.h中定义了类LangSwitch,创建用户界面。#include #include #include class LangSwitch : public QWidget Q_OBJECT public: LangSwitch(QWidget *parent = 0); LangSwitch();private slots: void changeLang(int index)
8、; private: void createScreen(); void changeTr(const QString& langCode); void refreshLabel(); QComboBox* combo; QLabel* label;(2) 源文件LangSwitch.cpp中的具体实现:#include langswitch.h#include #include #include LangSwitch:LangSwitch(QWidget *parent) : QWidget(parent) createScreen(); LangSwitch:LangSwitch(
9、)createScreen()函数用来创建基本的界面,其具体实现代码如下:void LangSwitch:createScreen() combo = new QComboBox; combo-addItem(English, en); combo-addItem(Chinese, zh); combo-addItem(Latin, la); label = new QLabel; refreshLabel(); QVBoxLayout* layout = new QVBoxLayout; layout-addWidget(combo, 1); layout-addWidget(label,
10、5); setLayout(layout); connect(combo, SIGNAL(currentIndexChanged(int), this, SLOT(changeLang(int);refreshLabel()函数具体实现如下:void LangSwitch:refreshLabel() label-setText(tr(TXT_HELLO_WORLD, Hello World);changeLang()函数改变语言的具体代码如下:void LangSwitch:changeLang(int index) QString langCode = combo-itemData(ind
11、ex).toString(); changeTr(langCode); refreshLabel();函数changeTr()读取对应的.qm文件,并调用installTranslator()方法来安装QTranslator对象,其具体实现代码如下:void LangSwitch:changeTr(const QString& langCode) static QTranslator* translator; if (translator != NULL) qApp-removeTranslator(translator); delete translator; translator
12、= NULL; translator = new QTranslator; QString qmFilename = lang_ + langCode; if (translator-load(QString(./)+qmFilename) qApp-installTranslator(translator); (3) 提取需要翻译的字符串并翻译然后生成.qm文件(这工作一般有专门的工作组去负责),具体操作如下: 修改文件,即在后面加上TRANSLATIONS的定义。修改完的文件的具体内容如下:TARGET = LangSwitchTEMPLATE = app SOURCES += main.cpp langswitch.cpp HEADERS += langswitch.h TRANSLATIONS = lang_en.ts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年地产评估风控合规合同
- 2026年地产孵化医疗信息化协议
- 关于某某企业赞助研究宇宙终极物理常数可变性合同
- 共聚焦显微镜针孔与光路对中作业指导书
- 2026年电子支付接口开发合同三篇
- 2026年甘肃肃兰州五十一中下学期高三学年第二次月考化学试题理学科试卷含解析
- 2026年电子产品回收处理合同二篇
- 2025年祠堂翻新工程承包合同二篇
- 贝叶斯网络在医疗诊断中的建模系统架构课程设计
- LBS附近商家算法设计课程设计
- 成人失禁相关性皮炎的预防与护理
- 专题12 数列-【好题汇编】五年(2020-2024)高考数学真题分类汇编
- 福建省能化集团招聘笔试真题
- DL∕T 1794-2017 柔性直流输电控制保护系统联调试验技术规程
- 编辑打印新课标高考英语词汇表3500词
- 湖南省长沙市周南梅溪湖中学2024届物理高二下期末综合测试试题含解析
- 上海市2021年中考数学真题卷(含答案与解析)
- 膝关节患者护理课件
- (完整word版)中医病证诊断疗效标准
- 承包商安全资格审查表格
- 2022年河北青年管理干部学院教师招聘考试真题
评论
0/150
提交评论