以前在代码里使用了包含汉字的字符串,往往显示在界面上就变得不正常。尽管QString::fromLocal8Bit()函数有时能解决问题,但不是总能成功。这篇博客介绍一种更可靠的办法--利用qt语言家来显示中文。
qt语言家翻译原理如下:把代码中想要翻译为汉语的字符串,用tr()函数包含起来。这些字符串应该是由字母、数字等普通字符组成的。在qt工程中建立ts文件。这个文件统计出所有被tr()函数标记的字符串。然后用qt语言家软件读取ts文件中所有的内容,并在语言家的界面中逐个进行英汉翻译。翻译结果保存于qm文件里。程序运行时,将自动读取qm文件,并完成翻译。
1)在pro文件中加入TRANSLATIONS变量:
#-------------------------------------------------
#
# Project created by QtCreator 2020-04-12T13:51:37
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = language
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
TRANSLATIONS += lingst.ts
等号右边的是ts文件的文件名。
在qt的菜单栏上选择“工具”-“外部”-“Qt语言家”-“更新翻译”。在pro文件的同级文件夹下将出现lingst.ts文件。
2)完成cpp代码
main.cpp,注意QTranslator的用法
#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator trans;
trans.load("lingst");//注意,此处不要.ts后缀
a.installTranslator(&trans);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp。注意tr()函数的用法
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(QObject::tr("I love programming"));
}
MainWindow::~MainWindow()
{
}
3)用qt 语言家软件(从 开始菜单\Qt\中找)打开ts文件。
在MainWindow.cpp中找到待翻译的短语,进行翻译。你将看到短语前面有一个问号:
点击这个文问号,它变为绿色的对号,说明翻译完成了。保存文件。
4)点击菜单栏 文件>>发布。qm文件将生成。
5)编译工程,然后将qm文件放到exe文件的同级路径下。运行程序,观察结果。