Qtopia/Qt 中文支持 (转)

Qt在设计开始就考虑了对多语言的支持.因此对中文的支持还是比较容易.很容易编写出多语言的程序来.关于Qtopia /QT的中文支持.主要有如下情况
  1.在自己的QT程序中加入中文支持.
 2.将Qtopia 的桌面显示中文.
 
我们分两种情况来看看QT怎么支持中文.这里的主要采用QT来演示,后面演示一个Qtopia 的版本。本文大部分程序和分析由我的学生刘彬完成,在此表示感谢.
 
应用程序加入中文支持.
    QT应用程序多语言支持的思路是,跟WINDOWS非常象。就是非英语的字符串不编译在程序当中。而是保存在一个字典文件里。在程序中使用是这个字典的索引。这样在不修改的程序的情况,只要换成不同的字典文件就会支持不同语言的显示。
    在WINDOWS程序中,这个字符串是资源文件(*.res),这个文件最后被链接到可执行文件当中。在程序中使用整数类型的资源ID,来从资源文件中,通过API函数LoadString()来从资源文件取出字符串。
    在QT也采用类似的流程。字符串保存在翻译文件(*.ts)当中,发布时它将会转换成二进制的 .qm文件。这个文件不需要链接可执行文件当中。程序中使用英文字符串作为字典的索引。使用tr()函数从翻译文件检索相应的字符串。
   下面用一个实例来演示QT程序中中文的使用. 我们以一个QT播放器的实例来示范,其中它的按键将采用文字标签,我们在后面把这一些标签换成中文。
简单用QtDesigner 来画出这个界面,我这里用的Qt 3.3的设计器。用Qtopia 2.2 的设计器大体差不多设计.在使用文字的地方,设计器会自动加入tr(),函数.
 

/*
 * Sets the strings of the subwidgets using the current
 * language.
 */

void PlayerForm::languageChange()
{
    setCaption( tr( "QT Player" ) );
    btn_open->setText( tr( "open" ) );
    btn_play->setText( tr( "play" ) );
    btn_stop->setText( tr( "stop" ) );
    btn_close->setText( tr( "close" ) );
}

 
第二步,用桌面版QT的lupdate 创建ts.文件,首先需要手工修改pro文件.增加ts文件的选项
在pro要增加一项 TRANSLATIONS = qplayer_CN.ts
 
然后lupdate可以识别桌面版和Qtopia 的pro文件的TRANSLATIONS来创建相应的.ts 文件。
   $QTDIR/bin/lupdate qplayer.pro
生成ts也是一个XML格式文件,内容如下,
 
<!DOCTYPE TS><TS>
<context>
    <name>PlayerForm</name>
    <message>
        <source>QT Player</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <source>open</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <source>play</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <source>stop</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <source>close</source>
        <translation type="unfinished"></translation>
    </message>
 
第三步,用桌面版的 linguist 打开ts.进行翻译。 再打开已经生成好的XX_CN.ts文件,可以发现用tr()标注的字段出现在Source text框内,再翻译需要翻译的字段完成这阶段的操作。在界面中操作
进行翻译
 
第四步:用lrelease把ts文件生成 qm文件给程序调用。以下命令将生成同名的二进制文件qplayer_CN.qm
  lrelease qplayer_CN.ts
 
第四步:在主程序中加入对Qtranslator类的支持。并且装入相应的qm文件。
 

#include <qapplication.h>
#include <qtranslator.h>

#include "qplayer.h"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    QTranslator translator(0);
    translator.load(QString("qplayer_CN.qm"));
    a.installTranslator(&translator);


    PlayerForm w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

 

完全编译后,重新运行程序,即可以看到中文界面(注意,桌面版要求中文简体语言设置)

(最简单做法是export LANG=zh_CN.UTF-8,或修改 /etc/sysconfig/i18n配置文件,下LANG的选项为zh_CN.UTF-8)


 以下源码分别是QT 3的桌面版和Qtopia 2的全部源码。

文件:qplayer.tar.rar
大小:2KB
下载:下载

 

Qtopia 桌面的汉化

  •  重新成Makefile 

Qtopia 桌面的汉化需要重新编译桌面。并且引用中文字体。在/XXX_qtopia/qtopia目录下生成Makefile 的configure 脚本加入 --languages "zh_CN"

./configure  -platform linux-generic-g++ --languages "zh_CN"

再编译 make lupdate.

  • 生成界面ts

最后在qtopia/bin下执行 ./nct_lupdate

此步后在qtopia/i18n/目录下会产生zh_CN 文件夹,并在zh_CN 文件夹下面会产生 主界面的 .ts文件 .用linguist 汉化.

  • 创建汉化配置文件

在qtopia/i18n/新建字典配置文件 .directory,内容如下。

[Translation]
File=QtopiaI18N
Context=Chinese
[Desktop Entry]
Name[]=Chinese

  • 修改汉字字体

修改qtopia/i18n/zh_CN/QtopiaDefault.ts 中的<name>FontMap</name> 这段代码变成:

<name>FontMap</name>
<message encoding="UTF-8">
<source>Small,helvetica,10</source>
<translation>Petit,unifont,11</translation>
</message>

 

  • 安装汉化版。

可用make install或直接调用lrelease转换后把qm文件拷入开发板

  • 修改界面语言

进入QT界面后,进settings ,language选项将语言设置成中文
同时在apperance选项中选择含有中文支持的字体,如其自带的unifont 字体

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本文档是QT中文版本 内容详尽,下面是片段 信号 void activated ( int id ) 静态公有成员 QKeySequence shortcutKey ( const QString & str ) QString keyToString ( QKeySequence k ) (obsolete) QKeySequence stringToKey ( const QString & s ) (obsolete) 保护成员 virtual bool eventFilter ( QObject * o, QEvent * e ) -------------------------------------------------------------------------------- 详细描述 QAccel类用来处理键盘的加速键和快捷键。 键盘加速键是在某个组合键按下的时候出发一个动作,加速键可以处理窗口部件和它子部件里所有的键盘动作所以它不会被键盘焦点所影响。 在大多数情况下,你不需要直接使用这个类。使用QAction类建立的具有加速键的动作可以同时在菜单和工具栏里使用。如果你的兴趣只是在菜单里使用QMenuData::insertItem()或者QMenuData::setAccel()建立只作用在菜单里的加速键。那么许多窗口部件可以自动的生成加速键,比如QButton、QGroupBox、QLabel(使用QLabel::setBuddy())、QMenuBar和QTabBar。实例: QPushButton p( "&Exit", parent ); // 自动使用快捷键ALT+Key_E QPopupMenu *fileMenu = new fileMenu( parent ); fileMenu->insertItem( "Undo", parent, SLOT(undo()), CTRL+Key_Z ); QAccel包括一个加速键的列表,这个列表里的项目可以使用insertItem()、removeItem()、clear()、key()和findKey()。 每一个加速键项目是由一个标示符和 QKeySequence组成。一个单独的键组是由一个键盘码组合上改变符形成的(SHIFT,CTRL,ALT 或者 UNICODE_ACCEL)。例如,CTRL + Key_p可以作为文本打印的快捷键。这个键的键盘码在qnamespace.h里列出。还有,使用UNICODE_ACCEL可以使字符以统一码(unicode)的形式表现出来。例如 UNICODE_ACCEL + 'A' 所给出的加速键和Key_A是一样的。
QtopiaQt Creator是两个不同的概念。Qtopia是Trolltech公司(现已被Digia收购)为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。而Qt Creator是Qt的集成开发环境(IDE),用于开发Qt应用程序。Qt Creator提供了一套工具和功能,使开发者可以轻松地编写、调试和部署Qt应用程序。所以,QtopiaQt Creator可以说是在不同层面上为Qt开发提供支持的工具和框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [QTQT/E,Qtopiaqt creator的联系与区别](https://blog.csdn.net/qq_23329691/article/details/79063908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [各种Qt的区别——QtQt/Embeded,QtopiaQt Designer,Qt Creator](https://blog.csdn.net/xingsongyu/article/details/88028027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值