Qt实现多国语言(即界面翻译)可实时进行切换
1.在工程文件添加 TRANSLATIONS = debug/lang_English.ts \ debug/lang_Chinese.ts 2.在需要翻译的地方用上tr 例如:setText(tr("hello world")); 3.提供一个更改语言的接口 void MainWindow::changeTr(int language) 4.重载void changeEvent(QEvent *e); 对语言改变事件进行处理 5.利用qt语言家更新翻译,手工翻译生成的.ts文件之后,再进行发布翻译
下面是个简单例子:
//mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void changeEvent(QEvent *e); void changeTr(int language_label); private: Ui::MainWindow *ui; QLabel *label,*label1; }; #endif // MAINWINDOW_H
//mainwindows.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QLabel> #include <QTranslator> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { label = new QLabel(this); label1 = new QLabel(this); label->setText(tr("hello world")); label1->setText(tr("hello")); label1->move(label->x(),label->y()+label->height()); ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::changeTr(int language_label) { QString qmFilename; static QTranslator* translator; if (translator != NULL) { qApp->removeTranslator(translator); delete translator; translator = NULL; } translator = new QTranslator(this); QString runPath = QCoreApplication::applicationDirPath(); //获取文件运行路径 qDebug() << runPath; if(language_label==1) { qmFilename = runPath + "/lang_Chinese.qm"; } else { qmFilename = runPath + "/lang_English.qm"; } qDebug() << qmFilename; if (translator->load(qmFilename)) { qDebug() << "installTranslator"; qApp->installTranslator(translator); } // ui->retranslateUi(this); // 重新设置界面显示 } void MainWindow::changeEvent(QEvent *e) { // MainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: qDebug() << "changeEvent" << e->type(); label->setText(tr("hello world")); label1->setText(tr("hello")); ui->retranslateUi(this); break; default: break; } }
//main.cpp #include "mainwindow.h" #include <QApplication> #include <QThread> #include "stdlib.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; // w.changeTr(1); w.show(); w.changeTr(1); return a.exec(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决