Qt知识回顾(八)——国际化、帮助系统和Qt插件

国际化

  一个应用程序的国际化就是使用该应用程序可以让其他国家的用户使用的过程,Qt支持现在使用的大多数语言。在Qt中,所有的输入部件和文本绘制方式对Qt支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细地绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。

使用Qt Linguist翻译应用程序
  在Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后对这个应用程序的翻译主要包含3步:①运行lupdate工具,从C++源代码中提取要翻译的我呢边呢,这时会生成一个.ts文件,这个文件是XML格式的;②在Qt Linguist中打开.ts文件,并完成翻译工作。③运行lrelease工具,从.ts文件中获得.qm文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。

程序翻译中的相关问题

1.对所有用户可见的文本使用QString
  因为QString内部使用了Unicode编码,所以世界上所有的语言都可以使用熟悉的文本处理操作来进行处理。而且,因为所有的Qt函数都是用QString作为参数来向用户呈现文本内容,所以没有char*到QString的转换开销。

2.对所有字符串文本使用tr()函数
  无论什么时候使用要呈现给用户的文本,都要使用tr()函数进行处理。如果引用的文本没有在QObject子类的成员函数中,那么可以使用一个合适的类的tr()函数,或者直接使用QCoreApplication::translate()函数。例如:

void some_global_function(LoginWidget *logwid){
QLabel *label1 = new QLabel(tr("Password:");
QLabel *label2 = new QLabel(LoginWidget::tr("password:"),logwid);
QLabel *label3 = new QLabel(qApp->translate("LoginWidget","password:"),logwid);
......
}

  如果要在不同的函数中使用要翻译的文本,那么可以使用QT_TR_NOOP()宏和QT_TRANSLAYE_NOOP()宏,它们仅仅对该文本进行标记来方便lupdate工具提取。

3.对加速键的值使用QKeySequence()函数
  类似于Ctrl+Q或者Alt+F等加速键的值也需要被翻译。如果使用了硬编码的Qt::CTRL+Qt::Key_Q来作为退出操作的快捷键,那么翻译将无法覆盖它。

4.对动态文本使用QString::arg()函数
  对于字符串中使用arg()函数添加的变量,其中%1、%2等参数的顺序在翻译时可以改变,它们对应的值不会改变。

5.支持编码
  QTextCodec类以及QTextStream使得Qt可以很容易地支持大量用户数据的输入和输出编码。当一个应用程序启动时,机器的语言环境便会决定处理8位数据时使用的8位编码。当然,应用程序有时也需要使用默认的本地8位编码以外的编码。如果想将Unicode转换为本地8位编码,那么可以使用QString::toLocal8Bit()函数;还有一个QString::toUtf8()函数返回使用8位UTF-8编码时的文本。要将其他编码转换为Unicode编码,那么可以使用QTextCodec类的toUnicode()函数,还有QString::fromUtf8()和QString::fromLocal8Bit()等。使用QTextCodec::codecForLocale()返回的编码是最重要的编码,因为这个是用户与他人或者其他应用程序进行通信最有可能使用的编码。

6.翻译非Qt类
  如果要使一个类中的字符串支持国际化,那么该类或者继承自QObject类或者使用Q_OBJECT宏。而对于非Qt类,如果要支持翻译,需要在类定义的开始使用Q_DECLARE_TR_FUNCTIONS()宏,这样就可以在该类中使用tr()函数。
7.自动判断语言环境
  如果在一个程序中提供了多种语言选择,那么最好的方法就是在程序启动判断本地的语言环境,然后加载对应的.qm文件。

帮助系统

  一个完善的应用程序应该提供尽可能丰富的帮助信息。Qt中可以使用工具提示、状态提示以及“What’s This”等简单的帮助提示,也可以使用Qt Assistant来提供强大的在线帮助。
1.简单的帮助提示
  进入设计模式在界面上单击,在弹出的级联菜单中选择“改变这是什么”项,则弹出“编辑这是什么”对话框,可以在这里输入文本或者添加照片来设置“What’s This”帮助提示。然后运行程序按下Shift+F1键就可以显示提示信息了。

2.定制Qt Assistant
  为了将Qt Assistant定制为我们自己的应用程序的帮助浏览器,需要先进行一些准备工作,主要是生成一些文件,最后再在程序中启动Qt Assistant。主要的步骤如下:
  >①创建HTML格式的帮助文档
  >②创建Qt帮助项目(Qt help project).qhp文件,该文件由.qhp生成,是二进制文件
  >③生成Qt压缩帮助(Qt compressed help).qch文件生成,是二进制文件
  >④创建Qt帮助集合项目(Qt help collection project).qhcp文件,该文件是XML格式的,用来生成下面的.qhc文件
  >⑤创建Qt帮助集合(Qt help collection).qhc文件,该文件是二进制文件,可以使Qt Assistant只显示一个应用程序的帮助文档,也可以定制Qt Assistant的外观和一些功能
  >⑥在程序中启动Qt Assistant

创建Qt插件

  Qt插件就是一个共享库(dll文件),可以使用它进行功能的扩展。Qt中提供了两种API来创建插件:①用来扩展Qt本身的高级API,如自定义数据库驱动、图片格式、文本编码和自定义风格等;②用来扩展Qt应用程序的低级API。
  如果要写一个插件来扩展Qt本身,那么可以子类化合适的插件基类,然后重写一些函数并添加一个宏。可以通过在帮助中查看How to Create Qt Plugins关键字来查看Qt提供的插件基类。Qt中提供了一个风格插件的例子,它是用来扩展Qt风格的。

1.在设计模式提升窗口部件
  首先填加一个MyButton类,基类设置为QPushButton,然后打开ui文件,在设计模式中向界面上放入一个PushButton,并在pushButton上右击,在弹出的级联菜单中选择“提升为”。在弹出的对话框中将提升的类名改为MyButton,头文件会自动生成为mybutton.h,这时单击右边的“添加”按钮,则会在提升的类列表中进行显示,单击“提升”按钮退出对话框。

2.创建应用程序插件
  创建一个插件时,要先创建一个接口,接口就是一个类,它只包含纯虚函数。插件类要继承自该接口。插件类存储在一个共享库中,因此可以在应用程序运行时进行加载。创建一个插件包括以下几步:
  >①定义一个插件类,他需要同时继承自QObject类和该插件所提供功能对应的接口类
  >②使用Q_INTERFACES()宏在Qt的元对象系统中注册该接口
  >③使用Q_PLUGIN_METADATA()宏导出该插件
  >④使用合适的.pro文件构建该插件
  使一个应用程序可以通过插件进行扩展要进行以下几步:
  >①定义一组接口(只有纯虚函数的抽象类)
  >②使用Q_DECLARE_INTERFACE()宏在Qt的元对象系统中注册该接口
  >③在应用程序中使用QPluginLoader来加载插件
  >④使用qobject_cast()来测试插件是否实现了给定的接口

3.创建Qt Designer自定义部件
  Qt Designer基于插件的架构使得它可以使用用户设计或者第三方提供的自定义部件,就像使用标准的Qt部件一样。创建Qt Designer自定义部件的更多内容可以在帮助中通过Creating Custom Widgets for Qt Designer关键字查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值