• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

VS2017+QT实现英文切换

武飞扬头像
Alpha-猪
帮助1

一、添加TS文件

右键项目->添加->新建项

注:在生成ts文件前,可将代码中需要动态翻译的中文用tr("中文")包含。

学新通
学新通
学新通

生产后缀ts文件

学新通

二、编辑TS文件

  1. Qt VS Tools->Launch Qt Linguist打开QT语言家。

  1. 打开上面生成的中英文ts文件。

学新通
  1. 选中文本信息,分布输入对应中英文,并点击“❓”变为“✔”。

  1. 翻译完所有文本信息,直到左侧上下文不在出现黄色问号。

学新通
学新通

注意:中英文翻译格式不一致,左侧“”会为黄色!

三、发布QM文件

点击文件->发布全部,在软件目录会对应生成两个qm文件

学新通

注:如果工程文件显示文本信息有改动,需要更新ts文件(右键ts文件->lupdate),并重新生成qm文件。

四、使用QM文件

  1.  
    int main(int argc, char *argv[])
  2.  
    {
  3.  
    QApplication a(argc, argv);
  4.  
     
  5.  
    //读取语言配置
  6.  
    std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
  7.  
    QString language_value = "0";
  8.  
    QString language_suffix = QString("zh");
  9.  
    LANGUAGE language = UI_ZH;
  10.  
    bool key = iniFile->contains("Language/english");
  11.  
    if (key)
  12.  
    {
  13.  
    language = (LANGUAGE)iniFile->value("Language/english").toInt();
  14.  
    if (language == UI_EN)
  15.  
    {
  16.  
    language_suffix = QString("en");
  17.  
    }
  18.  
    }
  19.  
     
  20.  
    QTranslator translator;
  21.  
    ret = translator.load(QString(":/Resources/Translatio_") language_suffix);
  22.  
    if (!ret) {
  23.  
    std::cout << "语音配置读取错误!" << std::endl;
  24.  
    }
  25.  
    a.installTranslator(&translator);
  26.  
     
  27.  
    MainForm w;
  28.  
    w.setTranslator(&translator);
  29.  
    w.setLanguage(language);
  30.  
    w.show();
  31.  
     
  32.  
    return a.exec();
  33.  
    }
学新通

MainForm.h

  1.  
    typedef enum {
  2.  
    UI_ZH,
  3.  
    UI_EN
  4.  
    }LANGUAGE;
  5.  
     
  6.  
    Q_DECLARE_METATYPE(LANGUAGE)
  7.  
     
  8.  
    public:
  9.  
    void setLanguage(LANGUAGE currentLanguage);
  10.  
     
  11.  
    void setTranslator(QTranslator* translator);
  12.  
     
  13.  
    private:
  14.  
    void changeEvent(QEvent *event);
  15.  
     
  16.  
    void switchLanguage(LANGUAGE language);
  17.  
     
  18.  
    private:
  19.  
    LANGUAGE _currentLanguage;
  20.  
    QTranslator *_translator = nullptr;
  21.  
     
  22.  
    private slots:
  23.  
    void Btn_ChineseClick();
  24.  
    void Btn_EnglishClick();
学新通

MainForm.cpp

  1.  
    void MainForm::setLanguage(LANGUAGE currentLanguage)
  2.  
    {
  3.  
    _currentLanguage = currentLanguage;
  4.  
    }
  5.  
     
  6.  
    void MainForm::setTranslator(QTranslator * translator)
  7.  
    {
  8.  
    _translator = translator;
  9.  
    }
  10.  
     
  11.  
    void MainForm::changeEvent(QEvent * event)
  12.  
    {
  13.  
    switch (event->type())
  14.  
    {
  15.  
    case QEvent::LanguageChange:
  16.  
    ui.retranslateUi(this);
  17.  
    break;
  18.  
    default:
  19.  
    QWidget::changeEvent(event);
  20.  
    }
  21.  
    }
  22.  
     
  23.  
    void MainForm::switchLanguage(LANGUAGE language)
  24.  
    {
  25.  
    QString language_qm;
  26.  
    switch (language)
  27.  
    {
  28.  
    case UI_ZH:
  29.  
    language = UI_ZH;
  30.  
    language_qm = QString(":/Resources/Translation_zh");
  31.  
    break;
  32.  
     
  33.  
    case UI_EN:
  34.  
    language = UI_EN;
  35.  
    language_qm = QString(":/Resources/Translation_en");
  36.  
    break;
  37.  
     
  38.  
    default:
  39.  
    language = UI_ZH;
  40.  
    language_qm = QString(":/Resources/Translation_zh");
  41.  
    }
  42.  
     
  43.  
    if (_currentLanguage != language)
  44.  
    {
  45.  
    _currentLanguage = language;
  46.  
    bool ret = _translator->load(language_qm);
  47.  
    if (!ret) {
  48.  
    PLOG_ERROR << "语音配置读取错误!";
  49.  
    }
  50.  
    else {
  51.  
    QVariant var = QString::number(language, 10);
  52.  
    std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
  53.  
    iniFile->beginGroup("Language");
  54.  
    iniFile->setValue("english", var);
  55.  
    iniFile->endGroup();
  56.  
    }
  57.  
    }
  58.  
    }
  59.  
     
  60.  
    void MainForm::Btn_ChineseClick()
  61.  
    {
  62.  
    switchLanguage(LANGUAGE::UI_ZH);
  63.  
    }
  64.  
     
  65.  
    void MainForm::Btn_EnglishClick()
  66.  
    {
  67.  
    switchLanguage(LANGUAGE::UI_ZH);
  68.  
    }
学新通

注:在需要动态切换中英文界面都需要实现重写void changeEvent(QEvent *event)事件并调用 retranslateUi(this)刷新界面;

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbkkej
系列文章
更多 icon
同类精品
更多 icon
继续加载