QT5实现语言国际化(中英文界面动态切换,超详细)

阅读: 评论:0

QT5实现语言国际化(中英文界面动态切换,超详细)

QT5实现语言国际化(中英文界面动态切换,超详细)

一、实现效果演示:

效果图

二、实现步骤

1、新建工程language_change工程,过程略,目录如下图:

工程目录

、 

2、点击打开language_change.pro文件,在文件中添加

TRANSLATIONS = english.ts chinese.ts

工程目录下生成“.ts文件”

3、点击工具->外部->Qt语言更新翻译(lupdate),生成english.ts和chinese.ts文件,生成的文件在工程目录下,在。pro文件里会增加 “RESOURCES +=
    qt_language.qrc” ,具体如下图:

RESOURCES += qt_language.qrc

4、利用和工程对应版本32bit或64bit的Linguist版 软件打开.ts文件,并对文件进行翻译,翻译完毕点击左上角的文件,发布会生产对应的.qm文件,具体如下图:

注意:UI设计时默认是英文,则只需翻译对应的cn.ts,点击发布会生产对应的qm文件

 4、工程添加源文件

新建.qrc源文件

5、把上面生成的qm文件添加到该qt_language.qrc目录下,

注意:引用时不需要包含qt_language,相对路径为:":/trans/cn.qm"对应的路径结构如下图:

右击源文件Resources
选择生成的qm文件

 6、在mainwindow.ui文件中添加,QLabel和combox控件如下图:

mainwindow.ui界面

7、mainwindow.h文件如下所示:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#define combox_index
#include <QMainWindow>
#include <QComboBox>
#include <QTranslator>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();static int aa;//全局变量声明
private slots:void on_comboBox_activated(const QString &arg1);//combox槽函数声明void changeEvent(QEvent *e);//changeEvent槽函数声明
private:QComboBox *combo;//QTranslator tran;//翻译器QApplication *qApp;//
private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

8、mainwondow.cpp代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
int MainWindow::aa = 0;//全局变量初始化
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->resize(400,600);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_comboBox_activated(const QString &arg1)
{aa = ui->comboBox->currentIndex();if(aa==0){qDebug()<<"下标为0";//调试用tran.load(":/english");}else if(aa==1){qDebug()<<"下标为1";//调试用tran.load(":/chinese");}else{qDebug()<<"下标为其他";//调试用}qApp->installTranslator(&tran);
}//调用installTranslator后,系统会给窗体发送信号将产生了changeEvent槽产生event
void MainWindow::changeEvent(QEvent *e)
{QWidget::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}
}
调试时的输出显示

OK,完成了基本的Demo实验,可以应用到我的项目了

容易忽略的细节:

1、槽函数changeEvent(QEvent *e)的在mainwindow.h的添加,否在不会出现预期效果

2、使用QTranslator时,头文件的添加#include添加等

本文发布于:2024-02-01 01:42:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170672292832940.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中英文   界面   语言   动态   详细
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23