文章目录
一、多语言界面设计
1.多语言界面设计概述
有些软件需要开发多语言界面版本,如中文版和英文版,并且在软件里可以方便地切换界面语言。Qt 为多语言界面提供了很好的支持,使用 Qt 的一些规则和工具,可以很方便地为应用程序开发提供多语言界面支持。
Qt 开发多语言界面应用程序的步骤:
- 在程序设计阶段,程序代码中每一种用户可见的字符串都用 tr() 函数封装,以便 Qt 提取界面字符串用于生成翻译资源文件。用 Ul 设计器可视化设计窗体时统一用一种语言,如汉语。
- 在项目配置文件(.pro文件),设置需要导出的翻译文件(.ts文件)名称,
- 使用lupdate工具扫描项目文件中需要翻译的字符串,并生成翻译文件。
- 使用 Qt 的 Linguist 程序打开生成的翻译文件,将程序中的字符串翻译为需要的语言,如将所有中文字符串翻译为英文
- ==使用 lrelease 工具编译翻译好的翻译文件,生成更为紧凑的 “.qm” 文件
- 在应用程序中用 QTranslator 类调用不同的 “.qm” 文件,实现不同的语言界面。
2.tr函数的使用
为了让 Qt 自动提取程序中用户可见的字符串,对于每个字符串都需要使用 tr() 函数封装。tr() 是 QObject 类的一个静态函数,在使用了 Q_OBJECT 宏定义的类或 QObject 的子类中,都可以直接使用 tr() 函数,否则需要使用 QObject::tr() 进行调用 。或者在类定义中用 Q_DECLARE_TR_FUNCTIONS 宏把 tr() 函数添加到类中之后,再直接调用 tr() 函数。
tr() 函数的定义是:
[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)
-
函数说明:
如果存在 sourceText 的翻译版本,则返回翻译后的文本;如果没有则返回 sourceText 的 UTF-8 编码字符串。
-
参数说明:
-
参数
sourceText:表示源字符串 -
参数
disambiguation:是为翻译者提供额外信息的字符串,用于对一些容易混淆的地方作说明 -
参数
n:可选参数,用于处理含有复数形式的文本
-
-
示例:
LabCellPos = new QLabel(tr("当前单元格"), this); QMessageBox::information(this, tr("信息"), tr("信息提示? "), QMessageBox::Yes); QString str1 = tr("左右", "大约的意思"); QString str2 = tr("左右", "掌握、控制的意思"); -
注意事项:
-
尽量使用常量字符串,不要使用字符串变量。在 tr() 函数中应该直接传递字符串常量,而不是用变量传递字符串
-
使用字符串变量时需要用
Qt_TR_NOOP()宏进行标记。若要在tr()函数中使用字符串变量,需要在定义字符串的地方用Qt_TR_NOOP()进行标记,这在使用字符串数组时比较有用,例如:const char *cities[4] = { Qt_TR_NOOP("Beijing"), Qt_TR_NOOP("Shanghai"), Qt_TR_NOOP("Qingdao"), Qt_TR_NOOP("Wuhan") }; for (int i = 0; i < 4
-


541

被折叠的 条评论
为什么被折叠?



