Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就不是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,
本文讲解的是Qt 动态切换语言,在编写国际化程序的时候,在很多情况下都是在系统启动的过程中选择语言,然后加载对应的地方语言翻译文件,实现语言的本地化。
但是也会有用户需要进行动态的语言切换(Dynamic Language Switching),也就是在程序主>体都运行起来后,需要改变语言的选项。而用户不希望因为语言切换而引起程序的重启或者窗口的关闭。
Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就不是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,比如retranslateStrings()这样的函数里。在改变语言的时候,调用这个函数就可以了。
下面是附带的一个演示程序,仅为证明功能使用。没有过多考虑代码的严密性。
- //dialog.cpp
- #include
- #include"dialog.h"
- Dialog::Dialog(QWidget*parent)
- :QDialog(parent)
- {
- label=newQLabel(this);
- okButton=newQPushButton(this);
- connect(okButton,SIGNAL(clicked()),this,SLOT(switchlang()));
- flag=0;
- retranslateStrings();
- QVBoxLayout*mainLayout=newQVBoxLayout;
- mainLayout->addWidget(label);
- mainLayout->addWidget(okButton);
- setLayout(mainLayout);
- }
- voidDialog::retranslateStrings()
- {
- label->setText(tr("Name:"));
- okButton->setText(tr("SwitchLanguage"));
- setWindowTitle(tr("SwitchLanguage..."));
- }
- voidDialog::switchlang()
- {
- QTranslatortranslator;
- if(0==flag){
- translator.load("switchlang_zh");
- flag=1;
- }else
- {
- flag=0;
- }
- qApp->installTranslator(&translator);
- retranslateStrings();
- }
- //dialog.h
- #ifndefDIALOG_H
- #defineDIALOG_H
- #include
- classQLabel;
- classQPushButton;
- //![0]
- classDialog:publicQDialog
- {
- Q_OBJECT
- public:
- Dialog(QWidget*parent=0);
- private:
- QLabel*label;
- QPushButton*okButton;
- intflag;
- privateslots:
- voidretranslateStrings();
- voidswitchlang();
- };
- //![0]
- #endif
- //main.cpp
- #include
- #include"dialog.h"
- intmain(intargc,char*argv[])
- {
- QApplicationapp(argc,argv);
- Dialogdialog;
- dialog.show();
- returnapp.exec();
- }
- //switchlang.pro
- TEMPLATE=app
- TARGET=
- DEPENDPATH+=.
- INCLUDEPATH+=.
- #Input
- HEADERS+=dialog.h
- SOURCES+=dialog.cppmain.cpp
- TRANSLATIONS+=switchlang_zh.ts
小结:
转载请说明出处
知优网 » Qt 动态切换语言 附源码(qt 多语言动态切换)
知优网 » Qt 动态切换语言 附源码(qt 多语言动态切换)