[Qt Creator 快速入门] 第9章 国际化、帮助系统和Qt插件
一、国际化
国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程。 Qt支持现在使用的大多数语言,特别是:
- 所有东亚语言(汉语、日语和朝鲜语);
- 所有西方语言(使用拉丁字母);
- 阿拉伯语;
- 西里尔语言(俄语和乌克兰语等);
- 希腊语;
- 希伯来语;
- 泰语和老挝语;
- 所有在Unicode5. 1中不需要特殊处理的脚本。
在Qt中,所有的输入部件和文本绘制方式对Qt所支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细地绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。相关知识可以在帮助中査看Internationalization with Qt关键字。
Qt对把应用程序翻译为本地语言提供了很好的支持,可以使用Qt Linguist工具很容易地完成应用程序的翻译工作,下面进行介绍。
1.1 使用Qt Linguist翻译应用程序
这一小节中先通过一个简单的例子介绍Qt中翻译应用程序的整个过程,然后再介绍其中需要注意的方面,对应这部分内容可以查看Qt Linguist Manual关键字。在 Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后对这个应用程序的翻译主要包含3步:
- ①运行lupdate工具从C++源代码中提取要翻译的文本,这时会生成一个.ts文 件,这个文件是XML格式的。
- ②在Qt Linguist中打开.ts文件,并完成翻译工作。
- ③运行lrelease工具从.ts文件中获得.qm文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而在程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。
下面通过一个简单的例子来介绍整个翻译过程,该例子实现了将一个英文版本的应用程序翻译为简体中文版本。
第一步,编写源码。新建Qt Gui应用,项目名称为myI18N,类名为MamWindow, 基类保持QMainWindow不变。建立完项目后,单击mainwindow.ui文件进入设计模式,先添加一个菜单,再为其添加一个“&New”子菜单并设置快捷键为Ctrl + N,然后往界面上拖入一个Push Button。再使用代码添加几个标签,打开mainwindow. cpp 文件,添加头文件 #include <QLabel>,然后在构造函数中添加代码 :
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 = 123;
QString name = "linux";
label3->setText(tr("ID is %1,Name is %2").arg(id).arg(name));
label3->resize(150, 12);
label3->move(100, 120);
这里向界面上添加了3个标签,因为这3个标签中的内容都是用户可见的,所以需要调用tr()函数。
第二步,更改项目文件。要在项目文件中指定生成的.ts文件,每一种翻译语言对应一个.ts文件。打开myI18N.pro文件,在最后面添加如下一行代码:
TRANSLATIONS = myI18N_zh_CN.ts
这表明后面生成的.ts文件的文件名为“myI18N_zh_CN. ts”,对于.ts的名称可以随意编写,不过一般是以区域代码来结尾,这样可以更好地区分,例如这里使用了“zh_CN”来表示简体中文。最后按下Ctrl + S保存该文件。
第三步,使用lupdate生成.ts文件。要进行翻译工作时,先要使用lupdate工具来提取源代码中的翻译文本,生成.ts文件。在项目文件列表的myI18N.pro文件上右击,在弹出的菜单中选择“在此弹出命令行提示”。这时打开的命令行控制台中已经自动切换到了项目目录下,这时输人下面一行代码,并按下回车键:
lupdate myI18N.pro
注意,这里要确保已经将Qt安装目录的bin目录的路径添加到了系统PATH环境变量中(笔者这里是D:\software\Technology\Qt\Qt5.11.2\Tools\mingw530_32\bin)。如果还没有设置PATH环境变量,可以按照2. 2. 1小节的方法设置,然后重启QtCreator,再进行该步骤。最后的结果表明更新了“myI18N_zh_CN. ts”文件,发现了8个源文本,其中有8条新的翻译和0条已经存在的翻译,如下图所示。这就是说可以对程序代码进行更改,然后多次运行lupdate,而只需要翻译新添加的内容。可以在项目目录中使用写字板打开这个.ts文件,可以看到它是XML格式的,其中记录了字符串的位置和是否已经被翻译等信息。
第四步,使用Qt Linguist完成翻译。这一步一般是翻译人员来做的,就是在Qt Linguist中打开 .ts文件,然后对字符串逐个进行翻译。在系统的开始菜单中启动liguist(也可以直接在命令行输入linguist或者在Qt安装目录的tools目录下找到并启动它),然后单击界面左上角的open图标,在弹出的文件对话框中进入项目目录,打开myI18N_zh_CN文件,这时整个界面如下图所示。Qt Linguist窗口的具体介绍请去原书看,这里由于篇幅限制不再介绍。
下面来翻译程序。在翻译区域可以看到现在已经是要翻译成中文Chinese translation,这是因为.ts文件名中包含了中文的区域代码。如果这里没有正确显示要翻译成的语言,那么可以使用Edit→Translation File Settings菜单项来更改。
下面首先对MainWindow进行翻译,这里翻译为“应用程序主窗口 ”,然后按下即回车键完成翻译并开始翻译第二个字符串。按照这种方法完成所有字符串的翻译工作, 如下图所示。翻译完成后按下Ctrl + S保存更改,然后退出Qt Linguist。这里对Qt Linguist只是进行了简单介绍,详细可以查看Qt Linguist Manual: Translators关键字。
第五步,使用lrelease工具生成.qm文件。可以使用 工具→外部→Qt语言家→lrelease(发布翻译) 生成.qm文件,或者在工程文件对应命令行输人如下一行代码,并按下回车键:
lrelease myI18N. pro
输出信息如下图所示,这表明已经生成了.qm文件。另外在Qt Linguist中也可以使用File→Reelase和File→Release As这两个菜单项来生成当前已打开的.ts文件对应的.qm文件。这三种方式都能生成.qm文件。
第六步,使用.qm文件。下面在项目中添加代码使用.qm文件来更改界面的语 言。进人main.cpp文件,添加头文件#include <QTranslator>,然后在“QApplication a(argc, argv);”代码下添加如下代码:
QTranslator translator;
translator.load("../myI18N/myI18N_zh_CN.qm");
a.installTranslator(&translator);
这里先加载了.qm文件(使用了相对路径),然后为QApplication对象安装了翻译。这里还要说明一点,有时可能因为部件的大小问题使得翻译后的文本无法完全显示,较好地解决方法就是使用布局管理器。
1.2 程序翻译中的相关问题
由于篇幅原因,这里不再介绍
二、帮助系统
一个完善的应用程序应该提供尽可能丰富的帮助信息。在Qt中可以使用工具提 示、状态提示以及“What's This”等简单的帮助提示,也可以使用Qt Assistant来提供强大的在线帮助。
2.1 简单的帮助提示
由于篇幅原因,这里不再进行说明。
2.2 简单的帮助提示
由于篇幅原因,这里不再进行说明。
三、创建Qt插件
由于篇幅原因,这里不再进行说明。
[Qt Creator 快速入门] 第9章 国际化、帮助系统和Qt插件的更多相关文章
- [Qt Creator 快速入门] 第1章 Qt Creator简介
Qt Creator 是一个跨平台的.完整的 Qt 集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具.集成的上下文相关的帮助系统.图形化调试器.代码管理和浏览工具等.这一章先对 Qt ...
- [Qt Creator 快速入门] 第2章 Qt程序编译和源码详解
一.编写 Hello World Gui程序 Hello World程序就是让应用程序显示"Hello World"字符串.这是最简单的应用,但却包含了一个应用程序的基本要素,所以 ...
- [Qt Creator 快速入门] 第5章 应用程序主窗口
对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...
- [Qt Creator 快速入门] 第8章 界面外观
一个完善的应用程序不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户.作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制.这一章将学习在Qt中设计应 ...
- [Qt Creator 快速入门] 第3章 窗口部件
从这一章开始正式接触Qt的窗口部件.在第2章曾看到 Qt Creator 提供的默认基类只有 QMainWindow.QWidget 和 QDialog 这3种.QMainWindow 是带有菜单栏和 ...
- [Qt Creator 快速入门] 第4章 布局管理
第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的. 无论是想要界面中部件有一个很整齐的排列,还是想要 ...
- QT Creator 快速入门教程 读书笔记(一)
一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌 ...
- [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator
Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...
- 《QT Creator快速入门》
ui中的类,这样使用无法通过调试: Ui::Dialog ui(&w); w.show(); 而需要改成: Ui::Dialog ui; ui.setupUi(&w); w.show( ...
随机推荐
- [luoguP1896] [SCOI2005]互不侵犯King(状压DP)
传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...
- POJ 2778 (AC自动机+矩阵乘法)
POJ 2778 DNA Sequence Problem : 给m个只含有(A,G,C,T)的模式串(m <= 10, len <=10), 询问所有长度为n的只含有(A,G,C,T)的 ...
- 微信浏览器video
<style> /* 解决上下有黑边,不能全屏 */ video{object-fit: fill;} </style> <video id="videoID& ...
- Linux下查看硬盘UUID和修改硬盘UUID(转)
查看硬盘UUID: 1. ls -l /dev/disk/by-uuid 2. blkid /dev/sda5 修改硬盘UUID: 1.新建和改变分区的UUID sudo uuidgen | xarg ...
- Sql查询一个列对应多个列
Sql查询一个列对应多个列 今天遇到一个问题,表table1有两个字段col1.col2两个字段.先记录下来,以后有个参考. 现在需要查询出的数据满足如下要求: 1.col1重复.col2重复的数据只 ...
- 在 IIS 中承载 WCF 服务
本主题概述了创建 Internet 信息服务 (IIS) 中承载的 Windows Communication Foundation (WCF) 服务所需的基本步骤. 本主题假设您熟悉 IIS 且了解 ...
- Web端口复用正向后门研究实现与防御
0×01背景 现在的很多远控/后门因为目前主流防火墙规则的限制,基本上都采用TCP/UDP反弹回连的通讯形式:但是在较高安全环境下,尤其负责web相关业务的环境,因为安防设备(防火墙,IDS,IPS等 ...
- DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法
最近因为工作需要,需要在不同的开发环境中应用Protobuf,特此,我专门研究了一下.为了防止自己忘记这些事情,现在记录在这里!需要的朋友可以借鉴一些,因为这些东西在GOOGLE和百度上搜索起来真的很 ...
- vuex 存值 及 取值 的操作
1.传值 // 定义参数 let params = { workItemId: workItemId, flowInstId: flowInstId, itemStatus: itemStatus, ...
- shell脚本 加密备份MySQL数据库
1.加密备份为.bak文件(实际只是个.zip文件) #!/bin/bash # $:IP地址 # $:用户名 # $:数据库密码 # $:数据库名 # $:加密密码 # $:备份文件名 mysqld ...