qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言

在.pro文件中添加下面几句,支持中文和英文

TRANSLATIONS = lanague_cn.ts\lanague_en.ts

在这里插入图片描述

二、通过qt语言家更新翻译生成.ts文件

在这里插入图片描述
完成以后在工程目录可以看到.ts文件
在这里插入图片描述

三、通过linguist翻译文件

在这里插入图片描述
在这里插入图片描述
打开文件
在这里插入图片描述
将两个文件同时选中,打开。
在这里插入图片描述

四、Qt语言家发布文字生成.qm文件

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

五、使用翻译文件进行多语言切换

为了方便多窗口同时切换,使用单例类进行,源码如下:

languageHelper.h
#ifndef LANGUAGEHELPER_H
#define LANGUAGEHELPER_H#include <QObject>
#include <QMutex>
#include <QTranslator>
#include <QApplication>class LanguageHelper : public QObject
{Q_OBJECT
public:enum language {chinese,english,undefined};
signals:void languageChaned();
private:explicit LanguageHelper();~LanguageHelper();LanguageHelper(LanguageHelper&) = delete;LanguageHelper operator=(const LanguageHelper &) = delete;public:static LanguageHelper *getInstance(){static QMutex mutex;mutex.lock();if(languageHelper == nullptr){languageHelper = new LanguageHelper();}mutex.unlock();return languageHelper;}static void quit();bool changeLanguage(language l);private:static LanguageHelper *languageHelper;QTranslator* translator = nullptr;language currentLanguage = language::undefined;
};#endif // LANGUAGEHELPER_H
languageHelper.cpp
#include "languageHelper.h"LanguageHelper *LanguageHelper::languageHelper = nullptr;LanguageHelper::LanguageHelper()
{this->translator = new QTranslator();}LanguageHelper::~LanguageHelper()
{if(this->translator){delete this->translator;this->translator = nullptr;}qDebug()<<"~LanguageHelper";
}void LanguageHelper::quit()
{if(languageHelper)delete languageHelper;
}bool LanguageHelper::changeLanguage(language l)
{if(l == this->currentLanguage || l == language::undefined)return true;bool ret = false;switch(l){case chinese:{if (this->translator != nullptr)qApp->removeTranslator(this->translator);ret = this->translator->load("E:/CompanyProjects/KPMG/winccTemp/language/Language/lanague_cn.qm");if (ret){bool install = qApp->installTranslator(this->translator);if (install == false)return false;}elsereturn false;}break;case english:{if (this->translator != nullptr)qApp->removeTranslator(this->translator);ret = this->translator->load("E:/CompanyProjects/KPMG/winccTemp/language/Language/lanague_en.qm");if (ret){bool install = qApp->installTranslator(this->translator);if (install == false)return false;}elsereturn false;}break;case undefined:{}break;}if (ret) {this->currentLanguage = l;emit languageChaned();}
}

通过按钮切换语言:

void MainWindow::on_btnChinese_clicked()
{LanguageHelper::getInstance()->changeLanguage(LanguageHelper::chinese);
}void MainWindow::on_btnEnglish_clicked()
{LanguageHelper::getInstance()->changeLanguage(LanguageHelper::english);
}

需要注意的是,在需要实时翻译的界面需要实现languageChaned信号的绑定,然后调用ui->retranslateUi(this);函数,如下:

    connect(LanguageHelper::getInstance(),&LanguageHelper::languageChaned,this,[=](){ui->retranslateUi(this);});

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括&#xff1a; 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

c# 海康照相机操作封装类(网口,USB)

需求 在上位机开发中, 海康照相机的使用应该是很常见的,主要是网口通讯的相机用的多,有时也会用一些USB接口相机。以前项目都在赶时间做。没有时间去好好设计和封装。时间长了发现重复代码就很多,还有没有设计和封装的代码,代码份数和相机个数对等,说白了就是一个相机写一…

【优秀案例】回本周期缩短10%!日安装量级高达5000以上!看NetMarvel如何赋能Ball Sort达成多项目标

“合成大西瓜在海外火了” 没想到&#xff0c;在国内已经过气的玩法转战到海外后&#xff0c;还能够翻红的这么彻底&#xff1f; 实际上&#xff0c;市面上很多在本土市场不温不火但转战海外赛道却盈利感人的应用不在少数&#xff0c;比如我们今天的重头戏《Ball Sort - Colo…

iView 中DatePicker日期选择器 v-model不生效的情况

场景 公司项目前段使用的是iview样式库&#xff0c;在开发的过程中&#xff0c;需要使用到时间选择器 使用后发现&#xff0c;输出的时间格式有问题&#xff0c;查看了需要使用到format来设置输出内容&#xff0c;发现不生效 百度… 1、百度后了解到v-model和format使用&…

基于Element的进度条Loading

基于Element的进度条loading组件 前端在中后台项目开发中经常要使用到loading遮罩层在数据交互时展示&#xff0c;目前我使用element组件库的loading&#xff0c;发现不能自定义&#xff0c;loading的样式比较少&#xff0c;官方只提供修改loading的图标和文字。 但是我的需求…

【云上建站】快速在云上构建个人网站4——网站备案

快速在云上构建个人网站4——网站备案 一、为网站配置域名1、使用域名的原因2、域名使用逻辑3、域名配置流程 二、域名注册1、查询域名&#xff1a;2、确认订单&#xff1a;3、实名认证域名4、域名解析配置解析域名&#xff1a;解析设置&#xff1a;访问域名&#xff1a; 一、为…

【深度学习:多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型

【深度学习&#xff1a;多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型 Meta 发布开源人工智能工具的历史分段任何模型DINOv2 什么是多模态学习&#xff1f;什么是嵌入&#xff1f;什么是 ImageBind&#xff1f;集成在 ImageBind 中的模式图像绑定架构特定模式编码器跨…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题&#xff1a; 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗&#xff1f; 4.鸿蒙的生态&#xff08;用户以及开发者&#xff09; 5.一些建议 1月18日&#xff0c;在鸿蒙生态千帆启航仪式上&#xff0c;华为宣布了继鸿蒙4…

实现单点登录

指再多系统应用群中登录一个系统&#xff0c;便可在其他所有系统中得到授权而无需再次登录&#xff0c;包括单点登录与单点注销两部分。 相比于单系统登录&#xff0c;sso需要一个独立的认证中心&#xff0c;只有认证红心能接受用户的用户名密码等安全信息&#xff0c;其他系统…

C#,打印漂亮的贝尔三角形(Bell Triangle)的源程序

以贝尔数为基础&#xff0c;参考杨辉三角形&#xff0c;也可以生成贝尔三角形&#xff08;Bell triangle&#xff09;&#xff0c;也称为艾特肯阵列&#xff08;Aitkens Array&#xff09;&#xff0c;皮埃斯三角形&#xff08;Peirce Triangle&#xff09;。 贝尔三角形的构造…

Python办公自动化:解锁高效工作流程,掌握文档处理的艺术

1.python自动化办公 Python 在自动化办公方面非常强大和灵活&#xff0c;能够帮助提高工作效率&#xff0c;自动化完成重复性任务。Python 提供了多种库和工具&#xff0c;可以用于处理文档、电子表格、PDF 文件、电子邮件等。下面是一些常用的 Python 自动化办公库及其应用&a…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

题记(35)--日期累加

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 设计一个程序能计算一个日期加上若干天后是什么日期。 二、输入描述 输入第一行表示样例个数m&#xff0c;接下来m行每行四个整数分别表示年月日和累加的天数。 三、输出描…

鸿蒙 ArkTS 从数组内查找指定的数据

let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者&#xff1a; 首先&#xff0c;我要感谢您抽出宝贵的时间阅读这篇文章。我深知&#xff0c;您的每一分每一…

新概念英语第二册(47)

New words and expressions】生词和短语&#xff08;9&#xff09; thirsty adj. 贪杯的 ghost n. 鬼魂 haunt v. &#xff08;鬼&#xff09;来访&#xff0c;闹鬼 block …

深入解析Lombok中的@SneakyThrows注解原理

在Java开发中&#xff0c;异常处理一直是一个重要的部分。Java中的异常分为受检查异常&#xff08;checked exceptions&#xff09;和未受检查异常&#xff08;unchecked exceptions&#xff09;。受检查异常需要在方法签名中显式声明&#xff0c;或者在方法体内部捕获处理&…

Codeforces Round 479 (Div. 3)

这一场div3整体比较简单注意细节即可 目录 A. Wrong Subtraction B. Two-gram C. Less or Equal D. Divide by three, multiply by two E. Cyclic Components F. Consecutive Subsequence A. Wrong Subtraction 按照题目意思直接模拟操作次数即可 void solve(){cin>…

05 MyBatis之表关系的声明+事务+SqlSession三件套的作用域

MyBatis 支持一对一&#xff0c;一对多&#xff0c;多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…

行为型设计模式—迭代器模式

迭代器模式&#xff1a;也叫作游标模式&#xff0c;能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下&#xff0c; 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构&#xff0c;且希望对客户端隐藏其复…