当前位置: 首页 > news >正文

QT笔记——多语言翻译

文章目录

    • 1、概要
    • 2、多语言切换
      • 2.1、结果展示
      • 2.2、创建项目
      • 2.2、绘制UI
      • 2.2、生成“.st”文件
      • 2.4、生成“.qm”文件
      • 2.5、工程demo

1、概要

借助QT自带的翻译功能,实现实际应用用进行 “多语言切换”

2、多语言切换

2.1、结果展示

多语言切换

2.2、创建项目

1、文件,创建“新项目”————》“Application”————》“Qt Widgets Application”;
2......

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.2、绘制UI

1)、菜单栏创建“QMenu”,模拟正常软件控件布局;
(2)、QMenu直接双击,输入对应的命名昵称,按键盘“Enter”键才会生效(有点bug哈);
(3)、创建QMenu下的QAction时,命名需要复制粘贴进去,再“Enter”键,直接输入不生效;
(4)、简单拖入两个QLable按钮,便于直观看到效果;

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.2、生成“.st”文件

    (1)、在.pro工程目录下,手动创建“translate”文件夹,用于存放需要添加的语种的.ts文件;

//注意这里的.ts文件名称是你自己命名的,自己记住那个语言对应哪个文件即可,一般习惯上使用各语种的简写,后续载入对应的qm语言文件做到对应正确就行。
//当前因为选中语种为“中文、英文、日语”,故命名如下所示;
TRANSLATIONS += \translate/LanguageTest_cn.ts\translate/LanguageTest_en.ts\translate/LanguageTest_jp.ts

在这里插入图片描述
    (2)、在QT菜单栏,选中“工具”——》选中“外部”——》选中“QT语言家”——》单机“lupdate”工具;
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.4、生成“.qm”文件

1)、找到安装目录下“bin”文件中的“linguist.exe”工具;
(2)、 双击“linguist.exe”工具,将QT生成的“.ts”文件拖入其中;
(3)、根据需要,进行对应的翻译,直达所有的控件皆翻译完成,如下图所示;
(4)、单机“linguist.exe”菜单栏中的“文件”,选择“保存”并“全部另存为”;

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.5、工程demo

//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QString>
#include <QDebug>
#include <QApplication>
#include <QTranslator>
#include <QFileInfo>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onMenulanguageTriggered(QAction *action);  //UI按钮触发,切换翻译void onLanguageTrans(int index);  //加载翻译的.qm文件private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->menu_language, &QMenu::triggered, [&](QAction *action) {onMenulanguageTriggered(action);});  //UI切换按钮,就直接触发“onMenulanguageTriggered()”函数,获取QMenu当前被选中的QAction
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onLanguageTrans(int index)
{static QTranslator* translator;  //初始化QT自带的翻译类“QThranslator”if(translator!=NULL){qApp->removeTranslator(translator);delete translator;translator=NULL;}translator=new QTranslator();QString strLanguagePath;switch (index) {case 1:// chinesestrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_cn.qm";break;case 2:// EnglishstrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_en.qm";break;case 3://jpstrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_jp.qm";break;}if(translator->load(strLanguagePath))  //判断.qm文件是否加载成功{qApp->installTranslator(translator);//用于将指定的翻译器安装到应用程序中。安装后,应用程序在显示文本时会优先使用该翻译器提供的翻译文本。this->ui->retranslateUi(this);//用于重新翻译当前界面上的所有控件文本。当翻译器安装成功后,调用这个函数可以使界面上的文本立即更新为新的翻译内容。}else{qDebug()<<"load failed";}
}void MainWindow::onMenulanguageTriggered(QAction *action)
{//刷新语言// 获取菜单中所有动作的列表QList<QAction *> actionList = ui->menu_language->actions();// 查找触发动作在列表中的索引int index = actionList.indexOf(action);if (index != -1){onLanguageTrans(index);qDebug() << "Triggered action index: " << index;} else{qDebug() << "Action not found in menu.";}
}
http://www.lryc.cn/news/532126.html

相关文章:

  • 【2025】camunda API接口介绍以及REST接口使用(3)
  • js面试some和every的区别
  • Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)
  • 【大数据技术】词频统计样例(hadoop+mapreduce+yarn)
  • java进阶知识点
  • 深度学习系列--02.损失函数
  • 构建一个数据分析Agent:提升分析效率的实践
  • 在K8S中,如何把某个worker节点设置为不可调度?
  • 硬件电路基础
  • 5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术
  • 阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
  • vue2-给data动态添加属性
  • Linux 文件和目录
  • 【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive
  • Leetcode 3440. Reschedule Meetings for Maximum Free Time II
  • 专门记录台式电脑常见问题
  • [操作系统] 进程终止
  • [x86 ubuntu22.04]进入S4失败
  • 12.外观模式(Facade Pattern)
  • ES6 入门教程:箭头函数、解构赋值及其他新特性详解
  • win编译openssl
  • 51单片机看门狗系统
  • 探索 paraphrase-MiniLM-L6-v2 模型在自然语言处理中的应用
  • 2025最新软件测试面试大全(附答案+文档)
  • Java语法进阶
  • UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK
  • 笔记day7
  • 106,【6】 buuctf web [SUCTF 2019]CheckIn
  • 基于Ubuntu2404搭建Zabbix7.2
  • OPENGLPG第九版学习 - 着色器基础