有个软件,里面做了13种语言,销售要求实现重新设置软件语言后,不需要重启软件,就可以看到软件显示出对应的语言。
 
软件中所有需要翻译的地方都是用的 tr(QString) 来做的,并且软件是多个窗口(QDialog),需要在设置窗口中设置语言,然后其他窗口的语言也发生变化。
 
最开始的做法是:
1.重新加载语言 qApp->installTranslator(QTranslator &messageFile);
2.重写 changeEvent 事件
3.在 changeEvent 事件中接收到 软件语言发生变化后,就刷新窗口 ui.retranslateUi(this);
 
流程是这个流程,方法是这个方法,但是就是不生效,无法动态切换,然后就是各种百度,基本都是前篇一律,一个抄一个,没啥用。
然后耗费了大量的时间后,看到了一个有用的:https://bbs.csdn.net/topics/392090653
从回复中,可以学习到Qt翻译的过程是: installlTranslater() -> changeEvent(QEvent::LanguageEvent) -> retranslate()/retranslateUI()。
大佬也有告诉我们在 changeEvent 之前,我们需要重新设置一遍 setText(tr())
 
 
然后经过不懈的努力,终于实现了,代码可以参考下面的:
*: 写一个函数,把所有的 setText(tr()) 都放在这个函数中处理。每次切换完语言,重新 setText(tr()),然后在刷新界面。
*: 如果其他窗口中的多语言没有生效,请注意内存分区。可以将变量:QTranslator trans 放在全局区,如下面的代码第二行。
 
#include "QtWidgetsApplication1.h"
QTranslator trans; QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this); mySetUiText();
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(change1()));
connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(change2())); } QtWidgetsApplication1::~QtWidgetsApplication1()
{} void QtWidgetsApplication1::changeEvent(QEvent * e)
{
if (e->type() == QEvent::LanguageChange)
{
ui.retranslateUi(this);
}
else
{
QWidget::changeEvent(e);
}
} void QtWidgetsApplication1::change1()
{
trans.load(":/Translation_zh_CN.qm");
qApp->installTranslator(&trans);
mySetUiText();
} void QtWidgetsApplication1::change2()
{
trans.load(":/Translation_en.qm");
qApp->installTranslator(&trans);
mySetUiText();
} void QtWidgetsApplication1::mySetUiText()
{
ui.label->setText(tr("text"));
ui.pushButton->setText(tr("zhongwen"));
ui.pushButton_2->setText(tr("yingwen")); ui.pushButton->setToolTip(tr("zhongwen"));
ui.pushButton_2->setToolTip(tr("yingwen"));
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Qt多语言动态切换的更多相关文章

  1. c#: 界面多语言动态切换简单实现

    终于有空整理下多语言实现思路.查阅已有方案,有用不同resx文件的,有每个控件动态设置的,有用反射去整的,颇为繁琐. 结合项目中实现方法,并做简化,实现通用的多语言切换方案,以做备忘. 它支持语言自定 ...

  2. Qt 国际化之二:多国语界面动态切换的实现

    第一步在你的pro里面加入 TRANSLATIONS = myexec_zh.ts (根据对应的ts文件修改)第二步用lupdate 操作pro 将要翻译的提取到ts文件 命令是 lupdate my ...

  3. QT皮肤系统的动态切换

    应用需求: 提供皮肤切换选项,在不重启应用程序的情况下实现皮肤的动态切换. 理论基础: 1) 图片资源是如何被利用的 这里先简要说明一下实现原理,皮肤的动态切换其关键在于图片资源的加载方式.QT中每个 ...

  4. Rmarkdown用法与R语言动态报告

    Rmarkdown用法与R语言动态报告数据分析用R语言非常便捷,因为R语言的社区强大,并且在不断更新和完善,提供了各种分析利器.Knitr和Rmarkdown包则是数据分析中的动态报告利器. 下面是一 ...

  5. 动态切换数据库(EF框架)

             文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串Connect ...

  6. 【原创】DESTOON做中英双语言(多语言)切换版本具体详解

    第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...

  7. spring+mybatis多数据源动态切换

    spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...

  8. Spring AOP动态切换数据源

    现在稍微复杂一点的项目,一个数据库也可能搞不定,可能还涉及分布式事务什么的,不过由于现在我只是做一个接口集成的项目,所以分布式就先不用了,用Spring AOP来达到切换数据源,查询不同的数据库就可以 ...

  9. mybatis动态切换数据源

    (#)背景:由于业务的需求,导致需要随时切换15个数据源,此时不能low逼的去写十几个mapper,所以想到了实现一个数据源的动态切换 首先要想重写多数据源,那么你应该理解数据源的一个概念是什么,Da ...

  10. springAOP实现基于注解的数据源动态切换

    需求 代码实现读写数据库分离 武器 spring3.0以上版本 实现思路 1.继承org.springframework.jdbc.datasource.lookup.AbstractRoutingD ...

随机推荐

  1. JS中Date和时间戳转换

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  2. SpringMvc原理概述

    目录 MVC整体架构和流程 SpringMVC 框架组件概述 SpringMVC 配置详解 springmvc.xml MVC整体架构和流程 用户发送请求至前端控制器 DispatcherServle ...

  3. 【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?

    问题描述 如何查看App Service Java堆栈JVM相关的参数默认配置值? 问题解答 可以通过App Service的高级管理工具(kudu:)来查看JVM的相关参数,使用命令:java -X ...

  4. 【Azure Developer】使用Azure Resource Graph的查询语法的示例

    文章"[Azure Developer]在Azure Resource Graph Explorer中查看当前订阅下的所有资源信息列表并导出(如VM的名称,IP地址内网/公网,OS,区域等) ...

  5. [好文推荐] 如何保护价值上千万的Node.js源代码? - 主要是ncc

    如何保护价值上千万的Node.js源代码? https://zhuanlan.zhihu.com/p/84386456 一个强大的JS混淆器. github.com/javascript-obfusc ...

  6. 日常办公——Excel中重复打印标题的设置

    打印预览时,所在数据行或列不能显示在同一页,在打印区域之外还有内容,为了方便阅读,可使用顶端标题行重复或左端标题行重复,具体方法如下: 按顺序操作,完成后点击确定即完成操作.

  7. Android Studio虚拟机文件默认C盘转移其他盘

    原文地址:Android Studio虚拟机文件默认C盘转移其他盘 - Stars-One的杂货小窝 某天发现,新创建的Android13模拟器,把我C盘搞得只剩下9G了,于是折腾了下,把模拟器相关文 ...

  8. MyBatisPlus常用功能总结!(附项目示例)

    这篇主要是总结一下MybatisPlus一些常用的场景,目前主要有以下几点: 完整的CURD操作示例 逻辑删除功能示例 自动填充功能示例 分页插件功能示例 有关一些其它重要的功能比如 条件生成器.主键 ...

  9. Android视音频基础知识

    学术概念 采样和采样频率: ⼀秒钟内采样的次数称为采样频率.采样频率越⾼,越接近原始信号,但是也加⼤了运算处理的复杂度.根据Nyquist采样定理,要想重建原始信号,采样频率必须⼤于信号中最⾼频率的两 ...

  10. 记录--form 表单恢复初始数据

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 form 表单恢复初始数据 在现代的 Web 开发中,表单是不可或缺的组件之一.用户可以通过表单输入和提交数据,而开发者则需要对这些数据进 ...