zoukankan      html  css  js  c++  java
  • QT做多语言功能

    pro文件加上以下字符,指定翻译文件:

    TRANSLATIONS = resource/zh_CN.ts 
                   resource/en_US.ts
    

      重载changeEvent事件:

    protected:
        void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
    

      然后我们可以编写切换语言的代码:

             QString strLanguageFile;
             if (strLanguage==0)
            {
              strLanguageFile = qApp->applicationDirPath() + QString("/resource/en_US");
            }
            else
            {
              strLanguageFile = qApp->applicationDirPath() + QString("/resource/zh_CN");
            }
              QTranslator *translator=new QTranslator(this);
              translator->load(strLanguageFile);
              qApp->installTranslator(translator);
              result=true;
    

      代码会触发LanguageChange事件,所以我们在changeEvent里更新ui,判断触发LanguageChange事件后就更新:

    void MainWindow::changeEvent(QEvent *event)
    {
        // In the case of events changing the application language
        if (event->type() == QEvent::LanguageChange) {
            ui->retranslateUi(this);    // translate the window again
        }
    }
    

      注意:后台字符需要更新需要重新指定。

    翻译字符后,我们发布翻译,拷贝生成的qm翻译文件到目标文件夹就可以了。

    存在的问题:

    1、新增字符,点击更新翻译后,新字符仍未在ts文件中出现

    解决办法:编译成功后再更新翻译,ts文件就会增加这些字符

    2、中文乱码

    解决办法:tr里的字符用英文,在ts文件里再翻译为中文

  • 相关阅读:
    C#_委托
    一个asp+ACCESS省市二级联动菜单程序
    asp怎么实现二级联动下拉菜单
    ASP用户登录代码
    Windows 2003 IIS 不支持ASP的问题
    iptables
    VNC ( Virtual Network Computing )
    MongoDB的备份(mongodump)与恢复(mongorestore)
    Locally managed (LMT) vs. Dictionary managed (DMT) tablespace
    向现有的磁盘组加入/删除ASM磁盘
  • 原文地址:https://www.cnblogs.com/ssvip/p/15107656.html
Copyright © 2011-2022 走看看