动态语言切换(续)-designer中的retranslateUi(带源码)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 14:49:51

动态语言切换(续)-designer中的retranslateUi(带源码)

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=41

 

前篇动态语言切换文中提到了动态切换语言的一点技巧。其实在desigener设计UI的时候也考虑到了这一点。

在将xxx.ui文件转换为ui_xxx.h文件的系统,uic工具为.h文件添加了retranslateUi(QWidget *) 这样的一个函数,就是专门做的一个重新设>置翻译文件的操作,不需要关闭或者隐藏任何一个窗体。

我们来看一个简单的hello.ui文件



LangForm



0
0
378
110



Lang Switch







Display English






Display Chinese









这个文件在一个QWidget和两个QPushButton里都有和text相关的属性。我们来看这3个text在ui_hello.h中 retranslateUi()函数中是怎样的[code]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[/code]所以在写动态语言切换程序时,只要把翻译语言加载进来,然后再调用retranslateUi()函数就可以实现用designer设计ui文件的动态无缝切换
了。

演示代码如下: hello.ui文件前面贴过,不再重复
//widget.h
[code]#ifndef WIDGET_H
#define WIDGET_H

#include
#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
#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
#include

#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://www.cuteqt.com/blog/?p=41