Loading...

QT4

发布时间:2007-01-01 19:01:00  来源: ChinaUnix博客    作者: ChinaUnix博客    点击:747

其它的一些说明
由于qt返回的是Unicode编码,譬如你在LineEdit中直接输入中文,返回的就是??,qt中可以直接使用QTextCodec来转换字符串的编码.
QString string;
string=LineEdit1->text(); //取得LineEdit1返回的文字
QTextCodec *codec=QTextCodec::codecForName("GBK");
//转换编码
QCString
chinese_string=codec->fromUnicode(string);//用QCString来存储返回的多字节编码
当然,你在头文件中就必需加入
#include  
#include  
#include  
4.QTextStream对中文的支持
QTextCodec* codec = QTextCodec::codecForName("GBK"); /* 当前编码为"GBK" */
QTextStream mystream(&file);
mystream.setCodec(codec);
5. QCString&QString
QCString中不以unicode编码
QString以unicode为编码.
qt内部使用unicode为编码,所以如果要在qt的部件如multilineedit中显示中文,则需要将非unicode的字符转换成unicode字符.
QCString locallyEncoded = "中国人不是东亚病夫"; // text to convert
QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for GBK
QString unicodeString = codec->toUnicode( locallyEncoded );

Qt 国际化编程
内容:
1. Qt 的文本显示
2. Qt 的文本输入
3. Qt 的打印
对本文的评价
订阅:
developerWorks 时事通讯
于明俭
 
2002 年 1 月 0Array 日
本篇讨论 Qt 库对国际化的支持" target="_blank">http://www-128.ibm.com/developerworks/cn/l...oolkit/qt/i18n/
Qt 国际化编程
内容:
1. Qt 的文本显示
2. Qt 的文本输入
3. Qt 的打印
对本文的评价
订阅:
developerWorks 时事通讯
于明俭
 
2002 年 1 月 0Array 日
本篇讨论 Qt 库对国际化的支持

,将介绍 Qt 对文本显示,输入和打印的支持,和如何 使用Qt 开发国际化的软件。
Qt 目前的版本(2.2.4)对国际化的支持已经相当完善。 在文本显示上,Qt 使用了Unicode 作为内部编码,可以同时支持多种编码。 为 Qt 增加一种编码的支持也比较方便,只要 增加该编码和Unicode的转换编码便可以了。 Qt 目前支持ISO标准编码ISO 885Array-1, ISO 885Array-2,ISO 885Array-3,ISO 885Array-4,ISO 885Array-5,ISO 885Array-7,ISO 885Array-Array,和 ISO 885Array-15(对于阿拉伯语和希伯来语的支持正在开发之中),中文GBK/Big5,日文 eucJP/JIS/ShiftJIS,韩文eucKR,俄文KOI8-R。 当然也可以直接使用UTF8编码。
Qt 使用了自己定义的Locale机制,在编码支持和信息文件(Message File)的翻译上弥补 了目前Unix上所普遍采用Locale和gettext的不足之处。 Qt 的这种机制可以使 Qt 的同一 组件(QWidget)上同时显示不同编码的文本。 比如,Qt 的标签上可以同时使用中文简体 和中文繁体文本。
在文本输入上,Qt 采用了XIM(X Input Method)标准协议,可以直接使用XIM输入服务器。 由于目前的绝大多数输入服务器都是针对单一语言的,所以在 Qt 的标准输入组件( QLineEdit,QMultiLineEdit)中的输入受到单一编码的限制,Qt 还不支持动态切换编码 输入的支持,这是它的不足之处。
1. Qt 的文本显示
像普通的国际化过程一样,Qt 使用了类似GNU gettext一样的函数 QObject::tr(),它 用于从Qt的信息文件 .qm 中取出信息,这些信息是经过 Qt 的工具处理的。 Qt在处理 编码时还使用了 QTranslator 类,可用于指定整个应用软件的 的信息文件。
使用 Qt 编写国际化的程序,最好不要在程序中直接使用特殊编码的文本。 比如要 编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取 出来翻译。 这样,程序还可以根据Locale的不同,支持多种语言。 下面介绍如何在 Qt 程序中标注字符串,如何提取并翻译文本。
下面是一段使用了 QObject::tr()的代码,它建立了一个弹出菜单,菜单项是"Quit", 它被放置在菜单条上,在菜单条上显示的是标签"File"。
QPopupMenu* popup;
popup = new QPopupMenu( this );
popup->insertItem( tr("&Quit"),qApp,SLOT(quit()) );
menubar->insertItem( tr("&File"),popup );
对 于绝大多数情况,可以用上述方法处理。不过有时在定义某些变量中使用的字符 串,不能使用上述方法,但是为了让Qt提取并翻译该字符串,必须用 某种方法标志出 来。Qt 定义了 QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 来标志它们。前者用于单个字 符串,后者用于多个字符串。比如,
static const char* strings[] = {
QT_TR_NOOP( "Hello" ),
QT_TR_NOOP( "World" )
};
有时需要使用printf/sprintf之类的函数动态生成字符串,比如,
QStings s;
s.sprintf( "Button %d",i );
but->setText( s );
对这种使用方式的国际化是使用 arg() 函数。
QString s = tr( "Button %1" ).arg(i);
but->setText( s );
提取上述信息的方法是使用 Qt 提供的工具 findtr 命令:
findtr [filename].cpp > i18n.po
它类似于GNU的 xgettext,上述文件的提取信息文件内包含,
....
"Content-Type: text/plain; charset=iso-885Array-1\n"
#: i18n.cpp:34
msgid "ExampleWidget::&File"
msgstr ""
...
接 下来是文本翻译过程。 在Qt中翻译信息文件时应该注意以下事项: (1) 提取的 信息文件的编码是iso-885Array-1,在翻译成某种语言(编码)时应该 注意改动它的 字符集,比如对中文GB2312和Big5编码,应该是, "Content-Type: text/plain; charset=gb2312\n"或者"Content-Type: text/plain; charset=big5\n"。 (2) 提取的信息有一个范围,比如上面的文件指定的范围是 ExampleWidget, 在翻译 前应该把它去掉,变成 msgid "::&File"。(3) 被翻译的字符串可能含有加速键 符号,如 "&File"中的"F",如果翻译成中文最好保留该信息,它可以翻译成 "文件(&F)"。
对于翻译后的文件(比如上面的翻译文件存为 i18n_gb.po),必须使用 Qt 提供的 工具 msg2qm 把它转换为 .qm 文件才能使用,
> msg2qm i18n_gb.po i18n_gb.qm
它类似于GNU的 msgfmt 命令。翻译后的文件可以用Qt程序直接调用。
QTranslator *translator = new QTranslator(0);
translator->load("i18n_gb.qm",".");
qApp->installTranslator(translator);
此外,Qt 还提供了类似于 msgmerge 的工具 mergetr,它用于把新提取的信息 文件和已经翻译过的信息文件融合起来,在此不再赘述。
在 Qt 中也可以直接使用 QTextCodec 来转换字符串的编码,这为在Qt下开发纯 中文软件带来了便利条件,不过这种方法不符和国际化/本地化的习惯,
char *string = "中文和English混和字符串!"
QTextCodec* gbk_codec = QTextCodec::codecByName("GBK");
QString gbk_string = codec->toUnicode(string);
QLabel *label = new QLabel(gbk_string);
如果使程序只支持一种编码,也可以直接把整个应用程序的编码设置为GBK编码, 然后在字符串之前 加tr(QObject::tr),
qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel *label = new QLabel( tr("中文标签") );
如果使Qt根据Locale的环境变量取得字符集,可以使用 QString::fromLocal8Bit(str)。
本节的例子请参见 qt-i18n-example.tar.gz
2. Qt 的文本输入
在 输入方面,Qt 的输入条(QLineEdit)和编辑区(QMultiLineEdit)都支持 XIM,只要配 合相应的输入服务器,便可以输入中文/日文/韩文。目前有许多支持XIM的软件,比如 中文: Chinput/xcin/rfinput/qArray,日文: kinput2/skkinput,韩文: ami/hanIM。
Qt程序的缺省输入风格是OverTheSpot风格,它也支持 OffTheSpot风格和 Root风格。 用户可以在起动程序时在命令行指定输入风格,比如对程序app,
./app -inputstyle overthespot #缺省风格,光标跟随
./app -inputstyle offthespot
./app -inputstyle root
经过 MiziLinux 补丁的Qt-2.2.0 支持 OnTheSpot 输入风格,并且把它作为 缺省的输 入风格。请参见

Qt 中的任何一个 Widget 都可以接受输入,只要它可以有键盘聚焦(Keyboard Focus)。所以对特殊 Widget 的输入处理只需要截获键盘输入,获取从XIM服务器 来的字符串。 对于OverTheSport风格的支持,刷新XIM输入服务器的位置即可。
3. Qt 的打印
在打印方面,XWindow下的 Qt 生成PostScript并使用lpr打印。 它含有QPrinter类, 可以方便地支持输出页面的控制。 对于中文打印,必须修正PostScript文件的输出 部分。
TOpia中文化
一:字符集介绍
我国已经颁布了多种中文信息编码标准,常用的有:GB2312-1Array80、GB12345、GB13000(GBK)以及最新标准GB18030,其中 GB13000是对GB2312的扩展,又常被成为GBK,GB18030向下兼容GB2312和GBK,中文WINDOWArray8、中文WIN2000操作 系统采用的中文字符集是GB2312。
GB2312字库仅覆盖双字节部分,存储位置索引是编码中每字节的第8bit置0得来的,如A1A1编码汉字在字库中的索引是2121,而非A1A1。以下是它的编码规则:
单字节:00~7F
双字节:A1~F7 A1~FE
GBK的编码规则是:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
GB18030是最新的汉字编码标准,其编码为一、二、四变长编码:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
四字节:81~FE 30~3Array 81~FE 30~3Array
Unicode编码采用等长编码,二个字节表示一个字符编码,对于ASCII码也采用双字节来表示,unicode使用二维空间来描述编码空间,平面分为256行、256列,对应于编码的高低字节。
二:Qt 国际化编程
在 文本显示上,Qt 使用了Unicode 作为内部编码,为了程序的国际化,通常我们在文本显示的地方不直接输入本地字符,用英文代替,比如要编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取出来翻译。对于需要翻译的地方,首先是在该文本处用tr()函数标识,同时制作出.qm信息文 件,并在程序中加入QTranslator即可。比如我们在某一程序中有如下语句:
setCaption(tr(“main window”));
为了能显示中文,有两种方法:
方法一:
l 修改工程文件,加上TRANSLATIONS = xxx.ts
l lupdate 工程文件名
l 用linguist编辑刚生成的xxx.ts文件并保存
l lrelease 工程文件名 xxx.qm
l 在main.cpp中加入QFont font1(“unifont”" target="_blank">http://www.mizi.com/ko/kde/doc/onthespot/onthespot.html。
Qt 中的任何一个 Widget 都可以接受输入,只要它可以有键盘聚焦(Keyboard Focus)。所以对特殊 Widget 的输入处理只需要截获键盘输入,获取从XIM服务器 来的字符串。 对于OverTheSport风格的支持,刷新XIM输入服务器的位置即可。
3. Qt 的打印
在打印方面,XWindow下的 Qt 生成PostScript并使用lpr打印。 它含有QPrinter类, 可以方便地支持输出页面的控制。 对于中文打印,必须修正PostScript文件的输出 部分。
TOpia中文化
一:字符集介绍
我国已经颁布了多种中文信息编码标准,常用的有:GB2312-1Array80、GB12345、GB13000(GBK)以及最新标准GB18030,其中 GB13000是对GB2312的扩展,又常被成为GBK,GB18030向下兼容GB2312和GBK,中文WINDOWArray8、中文WIN2000操作 系统采用的中文字符集是GB2312。
GB2312字库仅覆盖双字节部分,存储位置索引是编码中每字节的第8bit置0得来的,如A1A1编码汉字在字库中的索引是2121,而非A1A1。以下是它的编码规则:
单字节:00~7F
双字节:A1~F7 A1~FE
GBK的编码规则是:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
GB18030是最新的汉字编码标准,其编码为一、二、四变长编码:
单字节:00~7F
双字节:81~FE 40~7E
80~FE
四字节:81~FE 30~3Array 81~FE 30~3Array
Unicode编码采用等长编码,二个字节表示一个字符编码,对于ASCII码也采用双字节来表示,unicode使用二维空间来描述编码空间,平面分为256行、256列,对应于编码的高低字节。
二:Qt 国际化编程
在 文本显示上,Qt 使用了Unicode 作为内部编码,为了程序的国际化,通常我们在文本显示的地方不直接输入本地字符,用英文代替,比如要编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取出来翻译。对于需要翻译的地方,首先是在该文本处用tr()函数标识,同时制作出.qm信息文 件,并在程序中加入QTranslator即可。比如我们在某一程序中有如下语句:
setCaption(tr(“main window”));
为了能显示中文,有两种方法:
方法一:
l 修改工程文件,加上TRANSLATIONS = xxx.ts
l lupdate 工程文件名
l 用linguist编辑刚生成的xxx.ts文件并保存
l lrelease 工程文件名 xxx.qm
l 在main.cpp中加入QFont font1(“unifont”

,16,50,FALSE,QFont::Unicode);
qApp->setFont(font1);
QTranslator *translator = new QTranslator(0);
translator->load("xxx.qm",".");
qApp->installTranslator(translator);
方法二:
l findtr 文件名(通常为CPP文件) > xxx.po
l 编辑po文件,其中charset需由iso-885Array-1改为GB2312,然后将“main window”翻译成“主窗口”
l msg2qm ?scope zh_CN.GB2312 xxx.po xxx.q


  • 以上内容由 华夏名网 搜集整理,如转载请注明原文出处,并保留这一部分内容。

      “华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为十大IDC服务商之一。

    华夏名网网址导航: 虚拟主机 双线主机 主机 域名注册 cn域名 域名 服务器租用 酷睿服务器 vps vps主机

  • 上一篇:QT3下一篇:java 安装与配置
    FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    技术资讯
    推荐资讯
    网站备案经验谈 工信部备...(4915次点击)
    移动电信联通介入域名注册...(2766次点击)
    消息称网站未备案将一律关...(4156次点击)
    事情很紧急 大部分站长如...(2792次点击)
    微软因收取XP降级费而被...(2364次点击)
    巨鲸CEO陈戈:看好互联...(3723次点击)
    搜狐副总裁王小川:搜索不...(3565次点击)
    没有回头客的垃圾站 如何...(2358次点击)
    百度google没收录也...(2527次点击)
    并非主流 CN域名一元体...(2437次点击)
    最新更新
    百度关闭部分竞价系统,凤...(3413次点击)
    数万中小企业翘首以待“....(3231次点击)
    整治网络视听低俗之风 四...(3242次点击)
    国内首个IPV6网站认证...(3987次点击)
    国内首家VIA成员:金山...(2402次点击)
    分析师称网络广告市场6月...(2317次点击)
    未备案网站将被贴标 投资...(3207次点击)
    对于天价cn短域名 我们...(3614次点击)
    Mozilla要求微软公...(2347次点击)
    戴尔通过Twitter销...(2331次点击)
    相关资讯
    xml轻松学习手册(3)xml...
    xml轻松学习手册(4)xml...
    xml轻松学习手册(5)xml...
    了解web页面工具语言xml(...
    了解web页面工具语言xml(...
    了解web页面工具语言xml(...
    了解web页面工具语言xml(...
    了解web页面工具语言xml(...
    了解web页面工具语言xml(...
    xml技术上传文件_xml技巧