1.在.pro文件中添加
TRANSLATIONS = \
qt_cn.ts \ # 中文
qt_en.ts # 英文
2.ui中拖入控件,编译保存一下![](https://img-blog.csdnimg.cn/264f0fee39aa4de78a418ea44bf00246.png)
3.右键工程,添加现有文件
4.加载翻译
//使用时将.qm文件拷贝到构建目录的debug/release目录下
QString strFile =QCoreApplication::applicationDirPath()+"/";
ch.load(strFile + "qt_cn.qm");
en.load(strFile + "qt_en.qm");
5.点击工具-外部-Qt语言家-更新翻译
6.选择中文的,用...打开,选择Qt Linguist
7.打开后直接默认确定
8.中文的直接就复制中文的进来,按照123步骤,保存后关闭
9.点击英文的,步骤同上,改成自己需要翻译成的东西,注意如果和原来格式不一样会有警告,比如多了一个空格
10.关闭后点击工具-外部-Qt语言家-发布翻译
11.两个按键分别控制切换中英文
void MainWindow::on_pushButton_clicked()
{
qApp->installTranslator(&ch);
ui->retranslateUi(this);
}
void MainWindow::on_pushButton_2_clicked()
{
qApp->installTranslator(&en);
ui->retranslateUi(this);
}
12.运行结果
中文:
英文:
13.注意的点
1.以上方法只适用于ui里面的控件,如果是用代码生成的则无效,如果想让代码生成的也生效的话只需要在设置字符串的时候加上tr后,保存文件,需要点击工具-外部-Qt语言家-更新翻译,然后再用Qt Linguist打开
例:
QMessageBox::information(nullptr,tr("DigisynLink"),tr("确定重启设备?"));
QPushButton *bt = new QPushButton();
bt->setText(tr("你好"));
2.在执行ui->retranslateUi(this);之后会将原本setText的文本清空了,如果不希望被清空需要重新设置数据
ui->label->setText(tr("测试"));
如果不重新设置则会清空
重新设置后即可正常实现
void MainWindow::on_ChineseBt_clicked()
{
qApp->installTranslator(&ch);
ui->retranslateUi(this);
ui->label->setText(tr("测试"));
}
void MainWindow::on_EnglishBt_clicked()
{
qApp->installTranslator(&en);
ui->retranslateUi(this);
ui->label->setText(tr("测试"));
}
3.如果在mainwindow下使用了QStackWidget来创建多个界面,并且每个界面是分离出来管理的,以上步骤只能替换当前界面的中英文,如果想要实现全部替换,需要在每个页面里面重写event方法
bool MainWindow::event(QEvent *event)
{
if(event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this); // 更新界面的翻译
}
return QWidget::event(event);
}