动态语言切换(续)-designer中的retranslateUi(带源码)
来源:互联网 发布:淘宝店铺女装女鞋介绍 编辑:程序博客网 时间:2024/05/16 07:01
前篇动态语言切换文中提到了动态切换语言的一点技巧。其实在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_OBJECTpublic: 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.proTEMPLATE = appTARGET =DEPENDPATH += .INCLUDEPATH += .# InputHEADERS += widget.hFORMS += hello.uiSOURCES += main.cpp widget.cppTRANSLATIONS += i18n_zh.ts
- 动态语言切换(续)-designer中的retranslateUi(带源码)
- 动态语言切换(续)-designer中的retranslateUi(带源码)
- 动态切换语言(带源码)
- Qt动态语言切换
- 语言动态切换3
- Qt语言动态切换
- Qt动态切换语言
- Qml动态语言切换
- Qt动态语言的切换
- Qt之动态语言切换
- Qt实现动态切换语言
- Qt之动态语言切换
- Qt实现动态切换语言
- spring3国际化 动态语言切换
- Qt之动态语言切换
- QT的动态语言切换
- Linq动态查询与模糊查询(带源码示例)
- Linq动态查询与模糊查询(带源码示例)
- HTTP服务器模拟(原创)
- Fedora VNC Server配置
- 三种 对话框
- java基础知识
- 求职复习算法整理
- 动态语言切换(续)-designer中的retranslateUi(带源码)
- C#仿QQ皮肤-总体层次说明(一)
- 一个.java文件是否一定要和文件中的类名相同呢?一个.java文件中可以包含多个类吗?
- 概率论基础知识-条件概率,乘法公式,全概率公式和贝叶斯公式
- openGL ES link
- Oracle开发工具介绍
- C# 字符串转字节数组
- 需求调研阶段的初步解决方案
- Android应用实例之----天气预报程序.