找了好几个版本的东西都不好用啊
很麻烦的要把所有settext 的内容全都放在一个函数内
感觉很糟糕
工作量real大
再仔细想想看。。。。
QT GUI提供了语言动态转换的机制并辅以相应的工具实现界面的多语言实时动态切换功能。
一、 语言切换的实质
当界面上有一个地方需要显示字符串strA时,在代码中对这个字符串做一个标记,当程序执行到这个标记时会去一个翻译文件中找到这个标记对应的内容,然后将此内容实际的显示到界面。所以,要实现语言切换必须做到:
1、在代码中对需要做语言切换的地方要有标记;
2、有对应的翻译文件供应用程序加载。
二、 语言切换步骤
1、 在写代码时,对需要实现多语言的字符串用tr修饰符修饰,起到标记作用,具有做法参见例程;
2、 制作翻译文件。制作方法见下面例程;
3、 在代码中实现切换语言的地方实现翻译文件的加载以及界面字符的更新显示。
三、 动态语言切换demo程序制作
1、编写代码如下:
- <span style="font-size:24px;">Ltest.pro
- </span>
- #-------------------------------------------------
- #
- # Project created by QtCreator 2011-12-21T20:08:07
- #
- #-------------------------------------------------
-
- QT += core gui
-
- TARGET = Ltest
- TEMPLATE = app
-
-
- SOURCES += main.cpp\
- mainwindow.cpp
-
- HEADERS += mainwindow.h
-
- <span style="font-size:24px;">TRANSLATIONS = chinese.ts\
- english.ts</span>
- <span style="font-size:24px;">main.cpp</span>
- #include <QtGui/QApplication>
- #include "mainwindow.h"
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
-
- return a.exec();
- }
- <span style="font-size:24px;">MainWindow.h</span>
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
-
- #include <QtGui>
- #include <QMainWindow>
-
-
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- void updateUi();
- private:
- QPushButton *m_pBtnChange;
- bool m_bChinese;
- public:
- QTranslator *m_pTranslator;
- public slots:
- void ChangeLanguage();
- };
-
- #endif // MAINWINDOW_H
- <span style="font-size:24px;">MainWindow.cpp</span>
- #include "mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- m_pBtnChange(NULL),
- m_bChinese(true),
- m_pTranslator(NULL)
- {
- m_pTranslator = new QTranslator;
-
- m_pBtnChange = new QPushButton(this);
- connect(m_pBtnChange,SIGNAL(clicked()),this,SLOT(ChangeLanguage()));
-
- ChangeLanguage();
- }
-
- MainWindow::~MainWindow()
- {
-
- }
- void MainWindow::updateUi()
- {
- <span style="font-size:24px;"> setWindowTitle(tr("Main Frame"));
- m_pBtnChange -> setText(tr("change"));
- </span><span style="font-size:13px;">}
- </span>void MainWindow::ChangeLanguage()
- {
- QString exePath = QApplication::applicationDirPath();
- QString QmName;
- QTranslator Translator;
-
- if(m_bChinese)
- {
- m_bChinese = false;
- QmName = <span style="font-size:24px;">"chinese.qm";
- </span> }
- else
- {
- m_bChinese = true;
- QmName = <span style="font-size:24px;">"english.qm";
- </span> }
-
- if( m_pTranslator->load(QmName,exePath) )
- {
- <span style="font-size:24px;">qApp ->installTranslator(m_pTranslator);
- </span> }
-
- <span style="font-size:24px;">updateUi();
- </span>}
2、翻译文件制作(分三步走)