有个软件,里面做了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. 【Azure App Service】同一个App Service下创建多个测试站点的方式

    问题描述 在一个App Service中,部署多个应用,每个应用相互独立,类似与IIS中在根目录下创建多个子应用的情况. 问题解答 可以的.通过App Service Configuration页面, ...

  2. 【Azure 应用服务】App Service - 在修改应用服务计划的页面中,为什么无法查看到同一个资源组下面的其他应用服务计划(App Service Plan)呢?

    问题描述 在App Service的门户上,可以通过"Change App Service Plan"来改变当前App Service所属的应用服务计划(App Service P ...

  3. 详解Python中sys模块的功能与应用

    本文分享自华为云社区<深入Python:sys模块的功能与应用详解>,作者: 柠檬味拥抱. 在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的 ...

  4. Beckhoff 倍福 漏洞-整理(持续更新)

    工控漏洞整理网站 http://ivd.winicssec.com/index.php/Home/Search/search.html?keyword=Beckhoff

  5. Mybatis中使用choose/when语句采坑记

    项目中写查询语句的时候,时常会使用到Mybatis中的choose/when语句,根据不同的条件执行不同的分支. 最近在使用这个语句的时候,出现问题导致这个语句不能正确执行,排查很久才解决这个问题,因 ...

  6. Lock wait timeout exceeded; try restarting transaction-Mysql报错

    一.问题由来 现在在做一个小程序的后台,使用Java写的,数据库使用的Mysql,之前一直调试的时候都好好的,今天在调试的时候突然就报一个错: ### Error updating database. ...

  7. 开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流

    开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流

  8. 深入浅出Java多线程(十二):线程池

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十二篇内容:线程池.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为应对 ...

  9. WPF之控件布局

    目录 控件概述 WPF的内容模型 各类内容模型详解 ContentControl族 HeaderedContentControl族 ItemsControl族 ListBox:在XAML中添加数据 L ...

  10. NJUPT第一次积分赛

    NJUPT第一次积分赛 最近在忙第二次积分赛以及一些很复杂的队友关系(人际关系好复杂,好想电赛出个单机模式),但最后结果还是很满意的. 突然想起来第一次积分赛写的屎山,遂拿出来给大火闻闻 没啥很新颖的 ...