• qt 多语化


        最近项目使用的qt版本升级,导致了界面乱码问题,因此最后决定利用qt的多语化机制,来解决乱码问题,首先感谢这两篇文字的帮助,在此加上作者链接:Qt之多语化Qt多国语言的实现与切换(国际化)
        在项目多语化的文章开始编写之前,我说下qt多语化的思路,很简单,就3步,首先,从项目中获取字符串,然后编辑*.ts文件,填写需要翻译的字符串和对应的翻译后字符串,最后就是更新到项目中
        接下来,我详细介绍vs2013+qt5多语化的每一个步骤

    1、创建语言文件,如下图,然后translate_zh.hs文件执行lupdate操作,获取工程字符串到该ts文件

      qt <wbr>多语化

    qt <wbr>多语化

    2、编辑翻译文件

      启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存

    3、部署翻译文件

      工具->外部->Qt语言家->部署翻译,将生成语言文件qm

    注:随时可以重复“2”~“3”步骤以便更新翻译

    下面是qt多语化的一个简单事例,效果如下:

    qt <wbr>多语化qt <wbr>多语化

    qt <wbr>多语化

    qt <wbr>多语化
    qt <wbr>多语化

    qt <wbr>多语化
    qt <wbr>多语化
    上图中英文显示的时候,有部分中文的原因是,qm文件在配置英文ts文件时的原因,为了演示,故意设置了部分翻译,部分没有翻译,下面贴上程序代码.

    main.cpp

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);

        QTranslator translator;
        bool b = false;
        b = translator.load(":/translate/translate_zh.qm");
        a.installTranslator(&translator);
       
        translate w;
        w.SetCurrentTranslate(&translator);
        w.show();

        return a.exec();
    }

    translate .h

     1 class translate : public QWidget
     2 {
     3     Q_OBJECT
     4 
     5 public:
     6     translate(QWidget *parent = 0);
     7     ~translate();
     8 
     9 public:
    10     void SetCurrentTranslate(QTranslator * translator);
    11 
    12 private slots:
    13     void CurrentLanguageChanged(int);
    14 
    15 private:
    16     void Translate();
    17 
    18 private:
    19     Ui::translateClass ui;
    20     QTranslator * translator;
    21 };
    View Code
    translate.cpp
     1 translate::translate(QWidget *parent)
     2     : QWidget(parent)
     3 {
     4     ui.setupUi(this);
     5 
     6     ui.comboBox_langugeType->addItem(tr("chinese"));
     7     ui.comboBox_langugeType->addItem(tr("english"));
     8 
     9     connect(ui.comboBox_langugeType, static_cast(&QComboBox::currentIndexChanged)
    10             , this, &translate::CurrentLanguageChanged);
    11 }
    12 
    13 translate::~translate()
    14 {
    15 
    16 }
    17 
    18 void translate::SetCurrentTranslate(QTranslator * translator)
    19 {
    20     this->translator = translator;
    21     this->Translate();
    22 }
    23 
    24 void translate::CurrentLanguageChanged(int index)
    25 {
    26     switch (index)
    27     {
    28     case 0:
    29     {
    30               translator->load(":/translate/translate_zh.qm");
    31     }
    32         break;
    33     case 1:
    34     {
    35               translator->load(":/translate/translate_en.qm");
    36     }
    37         break;
    38     }
    39     this->Translate();
    40 }
    41 
    42 void translate::Translate()
    43 {
    44     ui.comboBox_langugeType->setItemText(0, tr("chinese"));
    45     ui.comboBox_langugeType->setItemText(1, tr("english"));
    46     ui.label_tip->setText(tr("label"));
    47     ui.label->setText(tr("language:"));
    48     ui.pushButton_ok->setText(tr("ok"));
    49     ui.pushButton_quit->setText(tr("quit"));
    50 }
    View Code
      

         经此一用,中文到控件上乱码的问题也顺带完美解决了,享受了一次轻松多国语实现的过程qt <wbr>多语化qt <wbr>多语化


  • 相关阅读:
    无法直接启动带有"类库输出类型"的项目解...
    基于.NET的免费开源的模板引擎---VTemplate(转)
    用户 'IIS APPPOOLDefaultAppPool' 登录失败。
    如何获得配置文件中,连接数据库的连接字符串
    如何获取数据库的链接字符串
    IIS运行.NET4.0配置
    Repeater用法
    asp.net三层架构详解
    C#本地时间转Unix时间
    C#Timer
  • 原文地址:https://www.cnblogs.com/swarmbees/p/5621413.html
Copyright © 2020-2023  润新知