在线问答
直播中

李雷

12年用户 368经验值
擅长:可编程逻辑,EMC/MEI设计,控制/MCU
私信 关注

【OK210试用体验】+Linux嵌入式下QT图形界面开发(三)

13  窗口装饰
         顶级窗口的装饰是由一个标题栏和一个框架组成的。Qt/Embedded 包括了这些窗口样式:BeOS, Hydro, KDE 和Windows。
       如果需要的话,我们可以配置不同的窗口使用不同的窗口装饰。通过子类化QWSDecoration,我们可以建立客户的装饰样式,并且把它们以插件的形式进行发布。为了在窗口管理器之外进行更多的控制行为,开发者需要子类化QWSManager。

14  国际化
        Qt/Embedded完全支持Unicode,一个国际标准的字符集。开发者在他们的应用中可以自由的混合使用被Unicode字符集支持的语言,例如阿拉伯文,英文,中文,希伯来文,日文和俄文等。为了有助于公司将产品推向国际市场,Qt还提供了将应用翻译成支持多种语言环境的工具。

15  Unicode
      Qt 使用QString 存储Unicode 编码的字符串,Qstring 取代了粗糙的const char*;它提供了用于处理Qstring 和const char *之间相互转换的构造函数和操作符。因为Qt使用了隐式共享(写时复制)技术来减少内存的使用,所以直接复制Qstring 的值是不会产生问题的。为有效率的存储ASII码字符串,Qt 还提供了QCString 类。Qt为所有要显示在屏幕上的文本,包括最简单的文字标签到最复杂的宽文本编辑器,提供了一个强大的Unicode文本呈现引擎。这个引擎支持一些先进的特征,例如特殊的间隔线、双向写和区别标记。它几乎支持世界上所有的书写系统,包括阿拉伯文,中文,古斯拉夫文,英文,希腊文,希伯来文,日文,韩文,拉丁和越南文。体现这个引擎的最优化性能的常用的例子就是:在带有加速功能的文字的下方显示一条下划线(例如File)。QtextCodec的子类用于处理不同编码类型的字符集之间的转换。Qt 3.0 支持37 种不同的编码方式,包括中文的Big5和GBK,日文的EUC-JP、JIS 和Shift-JIS,俄罗斯的KOI8-R和ISO 8859系列。它们可以以库的一部分或者插件的形式编译,或者使用“feature”机制去除这些编译。

16  应用的翻译
         Qt提供了相应的工具和函数用于帮助开发者以他们的本地语言推出应用。要使一个字符串可以被翻译,你需要把这个字符串作为一个参数放到tr()函数中调用。例如:saveButton->setText( tr("Save") )。
         Qt尝试寻找字符串"Save"的译文,如果找到的话,就会把它的译文显示出来,如果找不到,就用原来的字符串"Save"进行显示。例如我们把英文作为源语言,现在我们要把这个源语言翻译成中文,即中文为翻译的目标语言,以此类推。这样当我们调用tr()函数后,函数的参数的原先的缺省编码就会转变为Unicode编码。Tr()函数的通常用法为:Context::tr("source text", "comment")
上面的 “Context” 是指一个QObject对象的子类的名称。如果在一个包含了tr()成员函数的类的上下文环境中使用tr()函数时,“Context”通常可以省略掉。例如:
   Context::func1()
      {
               setText( tr("Save") );
      }
    “source text”是指要翻译的文本的内容“comment”是一个可选项,它用于给手工翻译者提供一些额外的信息。说了半天,还有一个重要的内容我们没谈,就是tr()函数如何寻找到译文。我们要把一个源字符串翻译为和它对应的译文(目标语言的字符串)时,我们需要让Qt知道这些译文放在哪里。Qt 规定了译文存储在QTranslator对象中,这个对象是从一个内存映射文件(扩展名为pm)中读取译文。每个pm 文件包含了某种语言的译文信息。所以开发者需要建立一个pm文件来存储应用中需要翻译的字符串的译文。Qt 提供了3 种工具帮助人们建立译文存储文件(.pm 文件),这3 个工具是lupdate,QtLinguist 和 lrelease。
      1、lupdate自动地从源代码文件(.cpp)和界面接口文件(.ui)中获取所有需要翻译的对象,即上述的(“Context”);同时还获取要翻译的所有的字符串(源语言的字符串),即上述的“sourcetext”;“comment”选项如果被使用的话,也会被纳入收集的范围。当这些信息收集完毕后,lupdate 最后会生成一个.ts文件(翻译源文件),这个文件是直接可阅读的。
    2、开发者使用Qt Linguist 工具提供的良好的人机界面打开一个.ts 文件(翻译源文件),然后开发者根据每一个sourcetext 填写上相对应的译文,这样一个.ts 文件(翻译源文件)就包含了完整的“Context”,“sourcetext”和译文信息。
    3、最后通过运行lrelease 去把一个.ts 文件(翻译源文件)压缩为一个.pm 文件(译文存储文件),生成的.pm文件可用在嵌入式设备上。
      总之,在一个应用的生存期间里,上述的步骤有可能根据需要会被反复执行。多次运行lupdate是很安全的,你可以重复使用已经存在的译文(.pm)文件,或者当你不想使用某些翻译文件时你可以标记这些翻译源文件为旧文件,而不需要删除它们,以备未来只用或者升级。

回帖(1)

825843374

2015-9-29 13:37:16
感谢楼主的分享,学习了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分