好贷网好贷款

QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言

发布时间:2016-12-5 8:36:00 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言",主要涉及到QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言方面的内容,对于QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言感兴趣的同学可以参考一下。

1.效果如下图,开启就自动检测系统语言,选择系统语言显示, UI有控件设置,在中文和英文之间切换。。   2. 源码 dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QtGui> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); void translateLanguage(); private: QLabel *label1; QLabel *label2; QComboBox *combox; QTranslator *translator; private slots: void comboxChange(); }; #endif // DIALOG_H dialog.cpp #include "dialog.h" #include <QDebug> Dialog::Dialog(QWidget *parent) : QDialog(parent) { QVBoxLayout *vLayout = new QVBoxLayout; label1 = new QLabel; label2 = new QLabel; translator = new QTranslator; qApp->installTranslator(translator); //安装翻译器 combox = new QComboBox(); QStringList list; list << "English" << "Chinese"; combox->addItems(list); this->translateLanguage(); vLayout->addWidget(label1); vLayout->addWidget(label2); vLayout->addWidget(combox); setLayout(vLayout); connect(combox, SIGNAL(currentIndexChanged(int)), this, SLOT(comboxChange())); } void Dialog::translateLanguage() { label1->setText(tr("test I18N")); label2->setText(tr("hello world")); } void Dialog::comboxChange() { qDebug() << combox->currentText(); if(combox->currentText() == "Chinese") { translator->load(QString(":/qm/myI18N_zh_CN.qm")); //选择翻译文件 this->translateLanguage(); } else { translator->load(QString(":/qm/myI18N_zh_EN.qm")); this->translateLanguage(); } } Dialog::~Dialog() { } main.cpp #include "dialog.h" #include <QApplication> #include <QTranslator> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec *codec = QTextCodec::codecForName("System"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec); QTranslator translator; QLocale locale; if( locale.language() == QLocale::English ) //获取系统语言环境 { qDebug() << "English system" ; translator.load(QString(":/qm/myI18N_zh_EN.qm")); //选择翻译文件 a.installTranslator(&translator); } else if( locale.language() == QLocale::Chinese ) { qDebug() << "中文系统"; translator.load(QString(":/qm/myI18N_zh_CN.qm")); a.installTranslator(&translator); } Dialog w; w.resize(200,200); w.show(); return a.exec(); } QRC.qrc <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>qm/myI18N_zh_EN.qm</file> <file>qm/myI18N_zh_CN.qm</file> </qresource> </RCC>  3. 由上可知,国际化的关键是怎么生成 myI18N_zh_CN.qm myI18N_zh_EN.qm 这样的翻译文件?? 步骤一: 将UI控件设置好,需要变换语言的控件,统一在translateLanguage()内设置tr("...."),用英文设置。 步骤二:在工程pro文件中加入一行  TRANSLATIONS = myI18N_zh_EN.ts,保存文件。 步骤三:点击工程pro文件打开终端, 输入命令 $ lupdate I18N.pro   ,后面接的工程pro文件名,执行完后可以发现生成一个 *.ts文件, 打开可以发现这是xml文档,里面标记有所有tr("...")的内容。 步骤四:用QT Linguist打开生成的 myI18N_zh_EN.ts文件,选择要翻译成的目标语言 如图翻译每个tr("..."),并保存,再去查看myI18N_zh_EN.ts即可发现,里面已有翻译标记。 步骤五:在终端窗口输入 $lrelease I18N.pro 命令, 完成后发现生成所需的二进制文件myI18N_zh_EN.qm。 如果还要翻译为其他语言,可重复上面的动作,生成不同的 *.qm文件即可。。。 *.qm文件也可以导入到资源文件QRC.qrc,编译到程序内部。 *.qm文件生成后,即可按上面程序一样使用,进行语言显示切换。。。    

上一篇:poj 2236 Wireless Network
下一篇:OpenCV函数cvAddWeighted调整alpha和gamma值

相关文章

相关评论