评论

收藏

[C++] QT 国际化

编程语言 编程语言 发布于:2021-08-10 13:01 | 阅读数:252 | 评论:0

运行时切换语言

1.  在项目的.pro文件中添加资源文件
TRANSLATIONS += Resource/main_widget_zh.ts \
                Resource/main_widget_en.ts
2. 在项目目录下新建Resource生成文件,Tools->External->Qt预言家->Update Translations
DSC0000.jpg

Resource文件中已经生成了两个文件main_widget_zh.ts 和 main_widget_en.ts

3. 使用QT的linguist.exe程序进行翻译
DSC0001.jpg

翻译完成后,文件->发布,就会生成.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;
}

关注下面的标签,发现更多相似文章