Qt 动态切换语言 附源码

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

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

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

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

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

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

小结:

责任编辑: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

2010-03-23 09:16:43

Python源码剖析

2011-03-03 15:32:51

Qt-Quick

2011-06-23 14:05:32

Qt 事件机制

2011-06-23 15:10:39

Qt 窗体

2011-06-23 15:32:05

Qt Windows消息

2011-07-20 11:09:58

苹果 OpenCL 变量

2011-06-28 16:18:24

Qt QObject

2011-06-27 16:59:19

Qt 动态 插件

2011-06-15 17:08:31

Qt Symbian 切换

2011-06-09 11:11:35

QT 静态库 动态库

2011-06-24 09:01:20

Qt QLibrary dll

2022-05-17 10:42:36

reboot源码解析

2011-01-06 09:00:01

静态语言动态语言

2009-06-14 21:54:37

动态语言Java脚本API
点赞
收藏

51CTO技术栈公众号