如果想在程序中显示中文或其他非英文的文字怎么办?QT支持几种显示非英文的文字的方法。我们还是在前两节的hello程序基础上示例如何添加中文显示。
一、
在hello.pro的尾端加入TRANSLATIONS = hello.ts,加入后的hello.pro如下例所示:
TEMPLATE = app
CONFIG += qt staticlib thread warn_on release
HEADERS += hello.h
SOURCES += hello.cpp/
main.cpp
TARGET = hello
TRANSLATIONS = hello.ts
二、
在终端中输入
lupdate hello.pro
然后回车,可以看到hello.pro所在目录下已经生成了一个hello.ts文件。这就是为什么我们刚才要在hello.pro加入TRANSLATIONS = hello.ts的原因。
另一个要注意的地方是,hello.ts中的翻译内容是根据程序中的tr("")内的字符串生成的。如我们例子中的tr("Hello")和tr("Quit"),但"You Clicked the Button!/n"因为没有tr,所以并不会出现在hello.ts中。
三、
在终端中输入
linguist&
然后回车,调出QT Linguist程序,在程序中打开刚才生成的hello.ts文件,然后写上相应的翻译文字,该例中我们只有两个字符串需要翻译:
Hello --> 你好
Quit --> 退出
输入好需翻译的文字后。点击QT Linguist程序菜单的File->Release...,生成hello.qm文件。把该文件放在与我们稍后编译好的hello程序放在同一目录。
四、
修改main.cpp。修改内容如下:
#include <qapplication.h>
#include <qfont.h>
#include <qtranslator.h>
#include "hello.h"
QFont font("",11,QFont::Bold);
int main(int argc,char ** argv)
{
QApplication app(argc,argv);
app.setFont(font,TRUE,0);
QTranslator translator(0);
translator.load("hello.qm", ".");
app.installTranslator(&translator);
Hello * dlg = new Hello();
app.setMainWidget(dlg);
dlg->show();
return app.exec();
}
其中translator.load("hello.qm", ".")为指定与hello程序同一目录的hello.qm为翻译文件。如需放在不同的目录,可在translator.load的第二个参数中指定。如translator.load("hello.qm", "/usr/tran")是指翻译文件hello.qm是放在/usr/tran目录下。
五、
编译并运行hello。可以看到,对话框的标题跟按钮的内容都变成中文的了。