以前在代碼裏使用了包含漢字的字符串,往往顯示在界面上就變得不正常。儘管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文件的同級路徑下。運行程序,觀察結果。