免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6269 | 回复: 3
打印 上一主题 下一主题

Qt开发(四):中文显示和国际化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-09 22:36 |只看该作者 |倒序浏览
http://xizhizhu.blogspot.com/2008/11/qt_09.html

Qt使用Unicode编码,自然也就支持中文了。显示中文最简单的方法是:
#include <QApplication>
#include
<QFont>
#include
<QLabel>
#include
<QString>

int main(int argc, char *argv[])

{

  QApplication app(argc, argv);

  QLabel label(QString::fromLocal8Bit("你好"));

  label.setFont(QFont("AR PL KaitiM GB", 18, QFont::Bold));

  label.show();

  return app.exec();

}


要正确显示中文,必须做到两点:一是编码方式,二是字体。在这段代码中,编码方式通过QString的静态函数fromLocal8Bit指定,字体通过QWidget(QLabel从QWidge继承而来)的函数setFont指定。

此外,还可用其他一些方式指定编码方式。例如:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

QLabel label(QObject::tr("你好"));

现在看看如何做到多语言支持。下面的例子展示了如何根据系统Locale加载相应语言。

首先,将源代码修改如下:
#include <QApplication>

#include <QFont>

#include <QLabel>

#include <QObject>

#include <QLocale>

#include <QTranslator>


int main(int argc, char *argv[])

{

QApplication app(argc, argv);


// 加载翻译器
QTranslator trans;

trans.load("test_" + QLocale::system().name(), app.applicationDirPath());

app.installTranslator(&trans);


QLabel label(QObject::tr("Hello, Qt!"));

label.setFont(QFont("AR PL KaitiM GB", 18, QFont::Bold));
label.show();

return app.exec();

}


这里,所有需要多语言支持的文本都需要用函数QObject::tr包裹。

然后创建test.qrc文件:
<!DOCTYPE RCC>
<RCC version="1.0">

<qresource>

   <file>test_en.qm</file>

   <file>test_zh.qm</file>

</qresource>

</RCC>



然后重新使用命令qmake -project创建.pro文件test.pro,并添加:
TRANSLATIONS=test_en.ts test_zh.ts

然后使用lupdate test.pro命令创建这两个ts文件,并使用Qt提供的linguist工具进行翻译,再使用lrelease test.pro命令根据翻译创建两个qm文件。

这时,使用命令qmake创建Makefile,并编译即可。现在的程序已经能够根据系统的本地Locale(英文或中文)选择相应语言了。

论坛徽章:
0
2 [报告]
发表于 2008-11-11 00:08 |只看该作者

回复 #1 zxz1984 的帖子

顶,回头有时间试试!

论坛徽章:
0
3 [报告]
发表于 2008-11-14 10:49 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-12-01 00:02 |只看该作者
好东东·~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP