1.效果图
2.上源码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTranslator>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_languageComboBox_currentIndexChanged(int index);
private:
void changeLanguage(const QString& languageCode);
Ui::MainWindow *ui;
QTranslator translator;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 设置语言选择下拉框的选项
ui->languageComboBox->addItem("中文", "zh_CN");
ui->languageComboBox->addItem("English", "en_US");
ui->languageComboBox->addItem("ไทย", "th_TH");
// 默认加载中文翻译文件
//changeLanguage("zh_CN");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_languageComboBox_currentIndexChanged(int index)
{
QString languageCode = ui->languageComboBox->currentData().toString();
changeLanguage(languageCode);
}
void MainWindow::changeLanguage(const QString &languageCode)
{
// 移除之前加载的翻译
qApp->removeTranslator(&translator);
// 加载新的翻译文件
QString filename = "F:\\vs3\\switchLange\\build\\Desktop_Qt_5_9_9_MinGW_32bit-Debug\\debug\\language_switcher_" + languageCode + ".qm"; // 当前工程目录下
//qDebug() << "Trying to load translation file:" << filename;
if (translator.load(filename))
{
qApp->installTranslator(&translator);
qDebug() << "Translation file loaded successfully for" << languageCode;
}
else
{
// 加载失败,输出错误信息
qDebug() << "Failed to load translation file for" << languageCode;
}
// 刷新界面上的文本
ui->retranslateUi(this);
}