Qt添加翻译
支持在软件中进行显示语言的替换。
参考:Qt 中英文切换 - 凉天满月 - 博客园 (cnblogs.com)
1. 翻译文件制作
1)在pro文件中添加生成中英文翻译过渡文件(.ts文件)所需代码
1
| TRANSLATIONS = res/cpcs_zh_CN.ts
|
- 此处为了整洁,所以我自己新建了res目录,且将ts文件输出到res目录下。不设也可以。
- 文件名最后的部分表示翻译的目标语言,例如CN表示要翻译成汉语。
2)添加代码
此时可以开始编写自己的工程代码了。需要翻译的部分用tr()函数括起来。示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this);
QMenu *pFile = ui->menubar->addMenu(tr("test")); ui->pushButton->setText("4777"); translator = new QTranslator(this); }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_pushButton_clicked() {
if(ui->pushButton->text() == "ENGLISH") {
translator->load(":/res/cpcs_zh_CN.qm"); qApp->installTranslator(translator); ui->retranslateUi(this); ui->pushButton->setText("4777"); qDebug() << "123"; }else { ui->pushButton->setText("ENGLISH"); qApp->removeTranslator(translator); ui->retranslateUi(this); qDebug() << "456"; } }
void MainWindow::on_pushButton_2_clicked() { QMessageBox::information(this,tr("this is tile!"),tr("this is text")); }
|
动态翻译不生效可以参考:Qt动态翻译不生效!_特立独行的猪鸭的博客-CSDN博客_qt翻译不生效
问题
Qt通过setText(tr()),设置的翻译不生效!!!
源代码
1 2 3 4 5 6
| QTranslator translator; QString qmFile = ":/translations/es.qm"; translator.load(qmFile); QApplication::installTranslator(&translator); 12345
|
translator 声明为了局部变量,当构造函数执行后就被销毁了,所以当构造函数执行后,翻译生效了一次,此后当我们通过setText的方式再设置文本时,翻译就失效了。
解决方案
1 2 3 4 5 6
| QTranslator *translator = new QTranslator(this); QString qmFile = ":/translations/es.qm"; translator->load(qmFile); QApplication::installTranslator(translator); 12345
|
将translator声明为指针,使用new方法,将其声明在堆上,则只有当该类被析构时,该translator才会被析构,此后的setText方法设置的文本就会被正常翻译。
打开Qt自带的命令行窗体,切换到源代码存放目录,并执行”lupdate 工程pro文件”生成ts文件
打开Qt语言家,打开ts文件,对需要翻译的内容增加汉语翻译,并保存,在刚才Qt命令窗体中,执行”lrelease 工程pro文件“,生成各qm文件
2.工程添加翻译文件
1)新建一个文本文件,名称修改为language.qrc,添加内容如下
2)工程pro文件中添加翻译资源文件
1 2
| RESOURCES += \ language.qrc
|