Qt/QT添加字典

scorlw 发布于

Qt添加翻译

支持在软件中进行显示语言的替换。

参考:Qt 中英文切换 - 凉天满月 - 博客园 (cnblogs.com)

1. 翻译文件制作

1)在pro文件中添加生成中英文翻译过渡文件(.ts文件)所需代码

1
TRANSLATIONS = res/cpcs_zh_CN.ts
  1. 此处为了整洁,所以我自己新建了res目录,且将ts文件输出到res目录下。不设也可以。
  2. 文件名最后的部分表示翻译的目标语言,例如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"));//此处的test不会随着语言切换而变化
ui->pushButton->setText("4777");
translator = new QTranslator(this);//需将translator定义在此处或者是定义为指针,可以使之后出现的动态翻译
}

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界面
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