Qt 动态切换语言 附源码

移动开发
Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就不是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,

本文讲解的是Qt 动态切换语言,在编写国际化程序的时候,在很多情况下都是在系统启动的过程中选择语言,然后加载对应的地方语言翻译文件,实现语言的本地化。

但是也会有用户需要进行动态的语言切换(Dynamic Language Switching),也就是在程序主>体都运行起来后,需要改变语言的选项。而用户不希望因为语言切换而引起程序的重启或者窗口的关闭。

Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就不是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,比如retranslateStrings()这样的函数里。在改变语言的时候,调用这个函数就可以了。

下面是附带的一个演示程序,仅为证明功能使用。没有过多考虑代码的严密性。

//dialog.cpp  
 
#include   
#include "dialog.h"  
Dialog::Dialog(QWidget *parent)  
: QDialog(parent)  
{  
    label=new QLabel(this);  
    okButton=new QPushButton(this);  
    connect(okButton,SIGNAL(clicked()),this,SLOT(switchlang()));  
    flag=0;  
    retranslateStrings();  
 
    QVBoxLayout *mainLayout = new QVBoxLayout;  
    mainLayout->addWidget(label);  
    mainLayout->addWidget(okButton);  
    setLayout(mainLayout);  
}  
 
void Dialog::retranslateStrings()  
{  
    label->setText(tr("Name:"));  
    okButton->setText(tr("Switch Language"));  
    setWindowTitle(tr("Switch Language ..."));  
}  
 
void Dialog::switchlang()  
{  
    QTranslator translator;  
    if(0==flag){  
        translator.load("switchlang_zh");  
        flag=1;  
    }else  
    {  
        flag=0;  
    }  
    qApp->installTranslator(&translator);  
    retranslateStrings();  
}  
//dialog.h  
#ifndef DIALOG_H  
#define DIALOG_H  
#include   
class QLabel;  
class QPushButton;  
 
//! [0]  
class Dialog : public QDialog  
{  
Q_OBJECT  
public:  
    Dialog(QWidget *parent = 0);  
private:  
    QLabel *label;  
    QPushButton *okButton;  
    int flag;  
private slots:  
    void retranslateStrings();  
    void switchlang();  
};  
//! [0]  
#endif  
//main.cpp  
#include   
#include "dialog.h"  
int main(int argc, char *argv[])  
{  
    QApplication app(argc, argv);  
    Dialog dialog;  
    dialog.show();  
    return app.exec();  
}  
//switchlang.pro  
TEMPLATE = app 
TARGET =  
DEPENDPATH += .  
INCLUDEPATH += .  
# Input  
HEADERS += dialog.h  
SOURCES += dialog.cpp main.cpp  
TRANSLATIONS+=switchlang_zh.ts 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.

小结:

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-30 13:37:29

MFC Qt 多国语

2011-06-21 09:19:24

Qt 界面 多国语言

2013-04-03 11:12:57

Java幻灯片切换

2011-07-20 10:50:19

苹果 OpenCL 多线程

2011-06-23 14:27:48

QT QLibrary 动态库

2011-06-23 11:16:39

Qt Excel

2011-03-03 15:32:51

Qt-Quick

2011-06-23 15:32:05

Qt Windows消息

2010-03-23 09:16:43

Python源码剖析

2011-06-23 15:10:39

Qt 窗体

2011-06-23 14:05:32

Qt 事件机制

2011-06-28 16:18:24

Qt QObject

2011-07-20 11:09:58

苹果 OpenCL 变量

2011-06-27 16:59:19

Qt 动态 插件

2011-06-15 17:08:31

Qt Symbian 切换

2025-02-26 10:40:40

2011-06-24 09:01:20

Qt QLibrary dll

2011-06-09 11:11:35

QT 静态库 动态库

2011-01-06 09:00:01

静态语言动态语言

2011-06-23 13:38:27

QT 元对象 信号
点赞
收藏

51CTO技术栈公众号