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

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

Qt 动态切换语言 附源码(qt 多语言动态切换)  动态 切换 语言 第1张

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

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

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

  1. //dialog.cpp
  2. #include
  3. #include"dialog.h"
  4. Dialog::Dialog(QWidget*parent)
  5. :QDialog(parent)
  6. {
  7. label=newQLabel(this);
  8. okButton=newQPushButton(this);
  9. connect(okButton,SIGNAL(clicked()),this,SLOT(switchlang()));
  10. flag=0;
  11. retranslateStrings();
  12. QVBoxLayout*mainLayout=newQVBoxLayout;
  13. mainLayout->addWidget(label);
  14. mainLayout->addWidget(okButton);
  15. setLayout(mainLayout);
  16. }
  17. voidDialog::retranslateStrings()
  18. {
  19. label->setText(tr("Name:"));
  20. okButton->setText(tr("SwitchLanguage"));
  21. setWindowTitle(tr("SwitchLanguage..."));
  22. }
  23. voidDialog::switchlang()
  24. {
  25. QTranslatortranslator;
  26. if(0==flag){
  27. translator.load("switchlang_zh");
  28. flag=1;
  29. }else
  30. {
  31. flag=0;
  32. }
  33. qApp->installTranslator(&translator);
  34. retranslateStrings();
  35. }
  36. //dialog.h
  37. #ifndefDIALOG_H
  38. #defineDIALOG_H
  39. #include
  40. classQLabel;
  41. classQPushButton;
  42. //![0]
  43. classDialog:publicQDialog
  44. {
  45. Q_OBJECT
  46. public:
  47. Dialog(QWidget*parent=0);
  48. private:
  49. QLabel*label;
  50. QPushButton*okButton;
  51. intflag;
  52. privateslots:
  53. voidretranslateStrings();
  54. voidswitchlang();
  55. };
  56. //![0]
  57. #endif
  58. //main.cpp
  59. #include
  60. #include"dialog.h"
  61. intmain(intargc,char*argv[])
  62. {
  63. QApplicationapp(argc,argv);
  64. Dialogdialog;
  65. dialog.show();
  66. returnapp.exec();
  67. }
  68. //switchlang.pro
  69. TEMPLATE=app
  70. TARGET=
  71. DEPENDPATH+=.
  72. INCLUDEPATH+=.
  73. #Input
  74. HEADERS+=dialog.h
  75. SOURCES+=dialog.cppmain.cpp
  76. TRANSLATIONS+=switchlang_zh.ts

小结:

转载请说明出处
知优网 » Qt 动态切换语言 附源码(qt 多语言动态切换)

发表评论

您需要后才能发表评论