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