Chinaunix

标题: Qt开发(四):中文显示和国际化 [打印本页]

作者: zxz1984    时间: 2008-11-09 22:36
标题: Qt开发(四):中文显示和国际化
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(英文或中文)选择相应语言了。
作者: zhrenxi    时间: 2008-11-11 00:08
标题: 回复 #1 zxz1984 的帖子
顶,回头有时间试试!
作者: huangdonger    时间: 2008-11-14 10:49

作者: hacktao    时间: 2009-12-01 00:02
好东东·~~~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2