Qt 動態(tài)切換語言 附源碼
本文講解的是Qt 動態(tài)切換語言,在編寫國際化程序的時候,在很多情況下都是在系統(tǒng)啟動的過程中選擇語言,然后加載對應(yīng)的地方語言翻譯文件,實現(xiàn)語言的本地化。
但是也會有用戶需要進(jìn)行動態(tài)的語言切換(Dynamic Language Switching),也就是在程序主>體都運行起來后,需要改變語言的選項。而用戶不希望因為語言切換而引起程序的重啟或者窗口的關(guān)閉。
Qt的國際化設(shè)計提供了這種可能。要實現(xiàn)這種動態(tài)切換,只需要在程序里使用一點小小的技巧,就不是把調(diào)用了Qt翻譯語句tr的代碼集中在某個和窗體變化無關(guān)的函數(shù)里,比如retranslateStrings()這樣的函數(shù)里。在改變語言的時候,調(diào)用這個函數(shù)就可以了。
下面是附帶的一個演示程序,僅為證明功能使用。沒有過多考慮代碼的嚴(yán)密性。
- //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
 
小結(jié):















 
 
 

 
 
 
 