qtcreator快速入门第9章国际化、帮助系统和qt插件剖析

上传人:今*** 文档编号:107492406 上传时间:2019-10-19 格式:PPT 页数:49 大小:1.33MB
返回 下载 相关 举报
qtcreator快速入门第9章国际化、帮助系统和qt插件剖析_第1页
第1页 / 共49页
qtcreator快速入门第9章国际化、帮助系统和qt插件剖析_第2页
第2页 / 共49页
qtcreator快速入门第9章国际化、帮助系统和qt插件剖析_第3页
第3页 / 共49页
qtcreator快速入门第9章国际化、帮助系统和qt插件剖析_第4页
第4页 / 共49页
qtcreator快速入门第9章国际化、帮助系统和qt插件剖析_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《qtcreator快速入门第9章国际化、帮助系统和qt插件剖析》由会员分享,可在线阅读,更多相关《qtcreator快速入门第9章国际化、帮助系统和qt插件剖析(49页珍藏版)》请在金锄头文库上搜索。

1、Qt Creator快速入门第2版,第9章 国际化、帮助系统和Qt插件,(3课时),主 要 内 容,9.1 国际化(第1课时) 9.2 帮助系统(第2课时) 9.3 创建Qt插件(第3课时) 9.4 小结(第3课时),9.1 国际化,国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程。Qt支持现在使用的大多数语言,特别是: 所有东亚语言(汉语、日语和朝鲜语) 所有西方语言(使用拉丁字母) 阿拉伯语 西里尔语言(俄语和乌克兰语等) 希腊语 希伯来语 泰语和老挝语 所有在Uni

2、code 5.1中不需要特殊处理的脚本 在Qt中,所有的输入部件和文本绘制方式对Qt所支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细的绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。,使用Qt Linguist翻译应用程序,在Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后,对这个应用程序的翻译主要包含三步: 1.运行lupdate工具从C+源代码中提取要翻译的文本,这时会生成一个.ts文件,这个文件是XML格式的; 2.在Qt Linguist中打开.ts文件,并完成翻译工作; 3.运行lrelease工具从.ts文件中获得.q

3、m文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而在程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。,第一步:编写源码,QLabel *label = new QLabel(this); label-setText(tr(“hello Qt!“); label-move(100,50); QLabel *label2 = new QLabel(this); label2-setText(tr(“password“,“mainwindow“); label2-move(100,80); QLabel *label3 = new QLabel(this); int id

4、 = 123; QString name = “yafei“; label3-setText(tr(“ID is %1,Name is %2“).arg(id).arg(name); label3-resize(150,12); label3-move(100,120); 这里向界面上添加了三个标签,因为这三个标签中的内容都是用户可见的,所以需要调用tr()函数。,tr( )函数,tr()函数一共有三个参数,它的原型如下: QString QObject:tr ( const char * sourceText, const char * disambiguation = 0, int n =

5、 -1 ) static 第一个参数sourceText就是要显示的字符串,tr()函数会返回sourceText的译文; 第二个参数disambiguation是消除歧义字符串,比如这里的password,如果一个程序中需要输入多个不同的密码,那么在没有上下文的情况下,就很难确定这个password到底指哪个密码。这个参数一般使用类名或者部件名,比如这里使用了mainwindow,就说明这个password是在mainwindow上的; 第三个参数n表明是否使用了复数,因为英文单词中复数一般要在单词末尾加“s”,比如“1 message”,复数时为“2 messages”。遇到这种情况,就可

6、以使用这个参数,它可以根据数值来判断是否需要添加“s”,例如: int n = messages.count(); showMessage(tr(“%n message(s) saved“, “, n);,第二步,更改项目文件,要在项目文件中指定生成的.ts文件,每一种翻译语言对应一个.ts文件。打开myI18N.pro文件,在最后面添加如下一行代码: TRANSLATIONS = myI18N_zh_CN.ts 这表明后面生成的.ts文件的文件名为“myI18N_zh_CN.ts”,对于.ts的名称可以随意编写,不过一般是以区域代码来结尾,这样可以更好的区分,例如这里使用了“zh_CN”来表

7、示简体中文。最后按下Ctrl+S保存该文件。,第三步,使用lupdate生成.ts文件,先要使用lupdate工具来提取源代码中的翻译文本,生成.ts文件。在项目文件列表的“myI18N.pro”文件上点击鼠标右键,在弹出的菜单中选择“在此打开命令行控制台”,这时打开的命令行控制台中会自动切换到了项目目录下。 这时输入下面一行代码,并按下回车键: lupdate myI18N.pro 该步也可以通过“工具外部Qt语言家更新翻译(lupdate)”菜单项来快速完成,注意在使用该菜单项之前先保存所有修改过的文件。,第四步,使用Qt Linguist完成翻译,这一步一般是翻译人员来做的,就是在Qt

8、Linguist中打开.ts文件,然后对字符串逐个进行翻译。 在系统的开始菜单中启动Linguist(也可以直接在命令行输入“linguist”启动它;或者在Qt安装目录的tools目录下找到并启动它),然后点击界面左上角的“open”图标,在弹出的文件对话框中进入项目目录,打开“myI18N_zh_CN”文件。,菜单项和工具栏,在菜单栏中列出了Qt Linguist的所有功能选项,而工具栏中列出了常用的一些功能,其中后面9个图标的功能为: 在字符串列表中移动到前一个条目 在字符串列表中移动到下一个条目 在字符串列表中移动到前一个没有完成翻译的条目 在字符串列表中移动到下一个没有完成翻译的条目

9、 标记当前条目为完成翻译状态,然后移动到下一个没有完成翻译的条目 打开或关闭加速键(accelerator)验证(validation)。打开加速键验证可以验证加速键是否被翻译,例如字符串中包含“&”符号,但是翻译中没有包含“&”符号,则验证失败。 打开或关闭短语结束标点符号验证。打开短语标点符号验证可以验证翻译中是否使用了和字符串中相同的标点来结尾。 打开或关闭短语参考(phrase book)验证。打开短语参考验证可以验证翻译是否和短语参考中的翻译相同。在翻译相似的程序时,若希望将常用的翻译记录下来,以便以后使用,就可以使用短语参考。可以通过“Phrases”“New Phrase Boo

10、k”菜单来创建一个新的短语参考,然后再翻译字符串时使用Ctrl+T将这个字符串及其翻译放入短语参考中。 打开或关闭占位符(place marker)验证。打开占位符验证可以验证翻译中是否使用了和字符串中相同的占位符,例如%1,%2等。,上下文(Context)窗口,这里是一个上下文列表,罗列了要翻译的字符串所在位置的上下文。其中的“Context”列使用字母表顺序罗列了上下文的名字,它一般是QObject子类的名字;而“Item”列显示的是字符串数目,例如0/8表明有8个要翻译的字符串,已经翻译了0个。在每个上下文的最左端用图标表明了翻译的状态,它们的含义是: 上下文中的所有字符串都已经被翻译

11、,而且所有的翻译都通过了验证测试(validation test); 上下文中的所有字符串或者都已经被翻译,或者都已经标记为已翻译,但是至少有一个翻译验证测试失败; 在上下文中至少有一个字符串没有被翻译或者没有被标记为已翻译; 在该上下文中没有再出现要翻译的字符串,这通常意味着这个上下文已经不在应用程序中了。,字符串(String)窗口,这里罗列了在当前上下文中找到的所有要翻译的字符串。在这里选择一个字符串,可以使这个字符串在翻译区域进行翻译。在字符串左边使用图标表明了字符串的状态,它们的含义是: 源字符串已经翻译(可能为空),或者用户已经接受翻译,而且翻译通过了所有验证测试; 用户已经接受了

12、翻译,但是翻译没有通过所有的验证测试; 字符串已经拥有了一个通过了所有验证测试的非空翻译,但是用户还没有接受该翻译; 字符串还没有翻译; 字符串拥有一个翻译,但是这个翻译没有通过所有的验证测试; 字符串已经过时,它已经不在该上下文中。,短语和表单(Sources and Forms)窗口:如果包含有要翻译字符串的源文件在Qt Linguist中可用,那么这个窗口会显示当前字符串在源文件中的上下文。 翻译区域(The Translation Area):在字符串列表中选择的字符串会出现在翻译区域的最顶端的“Source Text”下面;如果在使用tr()函数时设置了第二个参数消除歧义注释,那么这

13、里还会在“Developer comments”下出现该注释;后面的“translation”中可以输入翻译文本,如果文本中包含空格,会使用“.”显示;最后面的“translator comments”中可以填写翻译注释文本。 短语和猜测(Phrases and Guesses):如果字符串列表中的当前字符串出现在了已经加载的短语参考中,那么当前字符串和它在短语参考中的翻译会被罗列在这个窗口。在这里可以双击翻译文本,这样翻译文本就会复制到翻译区域。 警告信息(Warnings)窗口 :如果输入的当前字符串的翻译没有通过开启的验证测试,那么在这里会显示失败信息。,翻译程序,翻译区域可以看到现在已

14、经是要翻译成中文“Chinese translation”,这是因为我们的.ts文件名中包含了中文的区域代码。如果这里没有正确显示要翻译成的语言,那么可以使用“Edit”“Translation File Settings”菜单来更改。,第五步,使用lrelease生成.qm文件,在命令行输入如下一行代码,并按下回车键: lrelease myI18N.pro 这样就生成了.qm文件。也可以在Qt Linguist中使用“文件发布”和“文件另外发布为”这两个菜单项来生成当前已打开的.ts文件对应的.qm文件。 该步还可以通过Qt Creator的“工具外部Qt语言家发布翻译(lrelease)

15、”菜单项来快速完成。,第六步,使用.qm文件,在项目中添加代码使用.qm文件来更改界面的语言。进入main.cpp文件,然后在QApplication a(argc, argv);代码下添加如下代码: QTranslator translator; translator.load(“/myI18N/myI18N_zh_CN.qm“); a.installTranslator(”一行代码之前,这样才能对该部件进行翻译。,程序翻译中的相关问题,对所有用户可见的文本使用QString 对所有文字文本使用tr()函数 对加速键的值使用QKeySequence()函数 ,例如: exitAct = ne

16、w QAction(tr(“E 对动态文本使用QString:arg()函数,9.2 帮助系统,一个完善的应用程序应该提供尽可能丰富的帮助信息。在Qt中可以使用工具提示、状态提示以及“Whats This”等简单的帮助提示,也可以使用Qt Assistant来提供强大的在线帮助。 简单的帮助提示 定制Qt Assistant,简单的帮助提示,“Whats This”帮助提示。在运行一个对话框窗口时,会看到在标题栏中有一个“?”图标,按下它就会进入“Whats This”模式,这时如果哪个部件设置了“Whats This”帮助提示,那么当鼠标移动到它上面时就会弹出一个悬浮的文本框显示相应的帮助提示。 设计模式实现:在界面上点击鼠标右键,在弹出的菜单中选择“改变这是什么”菜单,这时便会出现“编辑这是什么”对话框,可以在这里输入文本或者添加图片来设置“Whats This”帮助提示。 代码方式实现: QAction *action = QWhatsThis:createAction(this); ui-mainToo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号