运行时切换语言
1. 在项目的.pro文件中添加资源文件TRANSLATIONS += Resource/main_widget_zh.ts \
Resource/main_widget_en.ts 2. 在项目目录下新建Resource生成文件,Tools->External->Qt预言家->Update Translations
Resource文件中已经生成了两个文件main_widget_zh.ts 和 main_widget_en.ts
3. 使用QT的linguist.exe程序进行翻译
翻译完成后,文件->发布,就会生成.qm后缀的文件。
4. 代码
4.1 如果需要在Qt Creator中成功运行,将上一步生成的两个.qm文件复制到项目的debug目录中的ts目录中,例如项目名称:QtTest,那么复制到build-QtTest-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug目录的ts目录中
4.2 代码#include "mainwindow.h"
#include <QApplication>
#include "mywidget.h"
#include <QTranslator>
#include <QtDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
translator.load("rs/main_widget_zh");
qDebug()<< a.installTranslator(&translator);
MyWidget w;
w.SetTranslator(&translator);
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mywidget.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include <QTranslator>
void MyWidget::BtnChineseClick()
{
translator->load("qm/main_widget_zh");
setAllControlsText();
}
void MyWidget::BtnEnglishClick()
{
translator->load("qm/main_widget_en");
setAllControlsText();
}
void MyWidget::setAllControlsText()
{
lab->setText(tr("This is a label"));
btn->setText(tr("This is a button(&B)"));
btn1->setText(tr("This is a button1"));
btnChinese->setText(tr("Chinese"));
btnEnglish->setText(tr("English"));
}
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle(tr("main window"));
this->resize(400,300);
QHBoxLayout *l=new QHBoxLayout(this);
this->setLayout(l);
lab=new QLabel();
l->addWidget(lab);
btn = new QPushButton(this);
l->addWidget(btn);
btn1 = new QPushButton(this);
l->addWidget(btn1);
btn1->setShortcut(Qt::CTRL + Qt::Key_S);
btnChinese=new QPushButton(this);
l->addWidget(btnChinese);
btnEnglish=new QPushButton(this);
l->addWidget(btnEnglish);
setAllControlsText();
connect(btnChinese,&QPushButton::clicked,this,&MyWidget::BtnChineseClick);
connect(btnEnglish,&QPushButton::clicked,this,&MyWidget::BtnEnglishClick);
}
void MyWidget::SetTranslator(QTranslator *translator)
{
this->translator=translator;
}
|