有个软件,里面做了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. Jenkins配置SpringBoot项目启动脚本

    目录 背景 脚本编写 变量说明 使用说明 Q&A jenkins部署时错误 背景 上一篇Jenkins配置介绍了Jenkins远程部署的相关配置和步骤,但是最后的部署脚本只适用于部署原始tom ...

  2. C#多线程(10):读写锁

    目录 ReaderWriterLockSlim ReaderWriterLockSlim 常用方法 订单系统示例 并发字典写示例 ReaderWriterLock 本篇的内容主要是介绍 ReaderW ...

  3. Java 交换两个变量的值

    1 //交换两个变量的值 2 // 1 3 int nu1 = 10; 4 int nu2 = 20; 5 6 System.out.println("nu1 = "+nu1+&q ...

  4. 数组动态表单验证,添加数组,逆序添加,表单验证会错位,发现是key的默认index问题,还有验证trigger问题,添加数据会爆红

    数组动态表单验证,添加数组,逆序添加,表单验证会错位,发现是key的默认index问题,还有验证trigger问题,添加数据会爆红 解决方案: trigger: 'blur,change' 换 tri ...

  5. C++学习笔记之进阶编程

    目录 进阶编程 STL(Standard Template Library) 容器(container) 仿函数(functor) 算法(algorithm) transform 查找 全排列 迭代器 ...

  6. 玉蟾宫(悬线dp)

    求最大子矩阵一般用采用悬线法 (包好用的牢底) 悬线法: [ 以这道题为例,我们将R称为障碍格子,将F称为非障碍格子] 我们选择任意一个非障碍格子,引出三条直线:左直 右直 上直 随后从这个点出发,分 ...

  7. 移远4G数传模块EC800M开发总结之基本备忘

    一 前记 1 EC800M模块是移远推出的小尺寸低功耗针对可穿戴市场的数传产品.笔者在几个产品上使用过程中,遇到了一些问题. 这里做个备忘吧. 二 梳理 1 工具,这个串口的默认波特率为115200. ...

  8. Shell脚本自动下载FTP文件上传到S3

    1. shell脚本下载 #!/bin/bash #用户名 USER=xxx #密码 PASSWORD=xxx #下载文件临时目录 SRCTDIR=/approveform/uat/tempin #S ...

  9. Kotlin学习快速入门(10)—— 重载运算符使用

    原文:Kotlin学习快速入门(10)-- 重载运算符使用 - Stars-One的杂货小窝 Kotlin中提供了基础的运算符,但是只是针对基础的数据类型,如Int,Double等 如果我们想让两个对 ...

  10. C++小细节

    cin不仅遇到EOF会返回无效状态(通常用来终止循环),遇到无效输入的时候也会返回无效状态,比如向整型变量输入字符. char类型的大小和机器有关,最小8位,大多数机器字节(byte)是8位,byte ...