动态语言切换(续)-designer中的retranslateUi(带源码)
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文链接:动态语言切换(续)-designer中的retranslateUi(带源码)
前篇动态语言切换 文中提到了动态切换语言的一点技巧。其实在desigener设计UI的时候也考虑到了这一点。
在将xxx.ui文件转换为ui_xxx.h文件的系统,uic工具为.h文件添加了retranslateUi(QWidget *) 这样的一个函数,就是专门做的一个重新设>置翻译文件的操作,不需要关闭或者隐藏任何一个窗体。
我们来看一个简单的hello.ui文件
- <?xml version="1.0" encoding="UTF-8"?>
- <ui version="4.0">
- <class>LangForm</class>
- <widget class="QWidget" name="LangForm">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>378</width>
- <height>110</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Lang Switch</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QPushButton" name="EnButton">
- <property name="text">
- <string>Display English</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="CnButton">
- <property name="text">
- <string>Display Chinese</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
- </ui>
这个文件在一个QWidget和两个QPushButton里都有和text相关的属性。我们来看这3个text在ui_hello.h中retranslateUi()函数中是怎样的
- void retranslateUi(QWidget *LangForm)
- {
- LangForm->setWindowTitle(
- QApplication::translate("LangForm", "Lang Switch", 0, QApplication::UnicodeUTF8));
- EnButton->setText(
- QApplication::translate("LangForm", "Display English", 0, QApplication::UnicodeUTF8));
- CnButton->setText(
- QApplication::translate("LangForm", "Display Chinese", 0, QApplication::UnicodeUTF8));
- Q_UNUSED(LangForm);
- } // retranslateUi
所以在写动态语言切换程序时,只要把翻译语言加载进来,然后再调用retranslateUi()函数就可以实现用designer设计ui文件的动态无缝切换
了。
演示代码如下: hello.ui文件前面贴过,不再重复
- //widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- #include "ui_hello.h"
- class Widget:public QWidget,public Ui::LangForm
- {
- Q_OBJECT
- public:
- Widget(QWidget *parent=0);
- private slots:
- void loadChinese();
- void loadEnglish();
- private:
- bool lang_is_english;
- };
- #endif
- //widget.cpp
- #include <QtGui>
- #include "widget.h"
- Widget::Widget(QWidget *parent)
- :QWidget(parent)
- {
- setupUi(this);
- connect(CnButton,SIGNAL(clicked()),SLOT(loadChinese()));
- connect(EnButton,SIGNAL(clicked()),SLOT(loadEnglish()));
- lang_is_english=true;
- }
- void Widget::loadChinese()
- {
- if(!lang_is_english)
- return;
- QTranslator translator;
- translator.load("i18n_zh");
- qApp->installTranslator(&translator);
- lang_is_english=false;
- retranslateUi(this);
- }
- void Widget::loadEnglish()
- {
- if(lang_is_english)
- return;
- QTranslator translator;
- qApp->installTranslator(&translator);
- lang_is_english=true;
- retranslateUi(this);
- }
- //main.cpp
- #include <QApplication>
- #include <QWidget>
- #include "widget.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc,argv);
- Widget *ww=new Widget;
- ww->show();
- return app.exec();
- }
- //i18n.pro
- TEMPLATE = app
- TARGET =
- DEPENDPATH += .
- INCLUDEPATH += .
- # Input
- HEADERS += widget.h
- FORMS += hello.ui
- SOURCES += main.cpp widget.cpp
- TRANSLATIONS += i18n_zh.ts
http://blog.csdn.net/cuteqt/article/details/5909770
动态语言切换(续)-designer中的retranslateUi(带源码)的更多相关文章
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- 在Xcode中使用Git进行源码版本控制
http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册 iOS开发 Swift Ap ...
- 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...
- 动态方式破解apk进阶篇(IDA调试so源码)
动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/qq_21051503/article/details/74907449 下面就说关于在IDA中And ...
- RocketMQ中Broker的启动源码分析(一)
在RocketMQ中,使用BrokerStartup作为启动类,相较于NameServer的启动,Broker作为RocketMQ的核心可复杂得多 [RocketMQ中NameServer的启动源码分 ...
- Springboot中mybatis执行逻辑源码分析
Springboot中mybatis执行逻辑源码分析 在上一篇springboot整合mybatis源码分析已经讲了我们的Mapper接口,userMapper是通过MapperProxy实现的一个动 ...
- Orchard CMS中如何打包不带源码的模块
在Orchard CMS的官网已经提供了文档说明如何打包,但是如果使用它的打包方式,打好的nuget包是带源代码的.如果是为开源系统写模块,不需要关注源代码是否可见.但是如果是用Orchard CMS ...
- Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现
欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...
- ThreadPoolExecutor的应用和实现分析(中)—— 任务处理相关源码分析 线程利用(转)
前面一篇文章从Executors中的工厂方法入手,已经对ThreadPoolExecutor的构造和使用做了一些整理.而这篇文章,我们将接着前面的介绍,从源码实现上对ThreadPoolExecuto ...
随机推荐
- RabbitMQ学习总结(6)——消息的路由分发机制详解
一.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...
- poj3249 Test for job 【图的DAG dp】
#include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> ...
- JavaScript 没有函数重载&Arguments对象
对于学过Java的人来说.函数重载并非一个陌生的概念,可是javaScript中有函数重载么...接下来我们就进行測试 <script type="text/javascript&qu ...
- 《UNIX环境高级编程》读书笔记之系统数据文件和信息(1)
1.UNIX系统口令文件包括了下图所看到的的各字段,这些字段包括在<pwd.h>中定义的passwd结构体中 POSIX定义了两个获取口令文件项的函数. 在给出用户登录名或用户ID后.这两 ...
- Android This Activity already has an action bar supplied by the window decor
This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ ...
- Android Studio 修改注释模板中的${USER}变量以及修改默认的头部注释
引言 通常我们创建类文件都会自动生成一段头部注释. 有时候这不是我们想要的效果. 它默认是Created By XXX. 而我们要的是@author XXX. 而且这里面的XXX是系统的的用户名,不一 ...
- m_Orchestrate learning system---二十二、html代码如何变的容易
m_Orchestrate learning system---二十二.html代码如何变的容易 一.总结 一句话总结:(结构清晰之后构建页面就变得超级容易了)(多做多用一下子就熟了) 1.文章显示页 ...
- 模板层 Template
每一个 Web 框架都需要一种很便利的方法用于动态生成 HTML 页面. 最常见的做法是使用模板. 模板包含所需 HTML 页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了 ...
- CSS3中的transition
W3C标准中对CSS3的transition是这样描述的: CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击,获得焦点,被点击或对元素任何改变中触发, ...
- WebSocket 前端封装
$.extend({ socketWeb:function (opt) { if("WebSocket" in window){ var setting=$.extend({ ur ...