Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

Qt 多语言实现

Posted on 2023年9月20日2023年9月20日 by hackdl

简介

Qt Linguist 提供了一套加速应用程序翻译和国际化的工具。Qt 使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统。

使用 QTranslator 来加载生成的 qm 文件,就可以让程序显示指定的语言。

// 国际化翻译
QString language = "CH"; // 默认为中文,后期可以使用ini方式保存语言选项
QTranslator translator;
translator.load(QString(":/Translate_") + language);
a.installTranslator(&translator);

要进行多语言的切换,需要执行以下步骤:

  • 对用户可见的文本信息全部使用 tr() 进行封装
  • 提供用户可以用来切换语言的一种方法。
  • 对于每一个窗口部件或者对话框,重写 changeEvent
    事件,当事件类型为QEvent::LanguageChange时,翻译文本进行重新调用(为了简单我把它放在一个单独的函数translateUI()中)。

多语言切换实例效果

添加翻译源

为了方便,这里只介绍中、英文之间的切换。

在pro中添加:

TRANSLATIONS += Translate_EN.ts 
               Translate_CH.ts

选择:工具->外部->Qt 语言家->更新翻译,则会生成对应的 ts 文件

翻译

发布翻译

选择:文件->发布,就会生成对应的 qm 文件。

源码分析

我们来看一个简单的示例:主界面可根据选择不同语言下拉选项实现语言的动态切换!

main.cpp:

#include "Translate.h"

#include 

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

    // 国际化翻译
    QString language = "CH"; // 默认为中文,后期可以使用ini方式保存语言选项
    QTranslator translator;
    translator.load(QString(":/Translate_") + language);
    a.installTranslator(&translator);

    Translate w;
    w.setTranslator(&translator);
    w.show();

    return a.exec();
}

Translate.h:

#ifndef TRANSLATE_H
#define TRANSLATE_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

class Translate : public QWidget
{
    Q_OBJECT

public:
    Translate(QWidget *parent = nullptr);
    void setTranslator(QTranslator* translator); // 设置翻译对象

protected:
    void changeEvent(QEvent *event); // 改变事件

private:
    void translateUI(); // 统一设置需要被翻译的文本

    QLabel *m_pLabText;
    QComboBox *m_pComboBox;
    QTranslator *m_translator; // 国际化翻译对象
};
#endif // TRANSLATE_H

Translate.cpp

#include "Translate.h"

Translate::Translate(QWidget *parent)
    : QWidget(parent)
{
    // 初始化界面
    this->setFixedSize(400, 200);

    // 初始化控件
    m_pLabText = new QLabel;
    m_pComboBox = new QComboBox;
    m_pComboBox->addItem("Chinese");
    m_pComboBox->addItem("English");

    // 主布局
    QVBoxLayout *m_pLayoutMain = new QVBoxLayout(this);
    m_pLayoutMain->addStretch();
    m_pLayoutMain->addWidget(m_pLabText, 0, Qt::AlignCenter);
    m_pLayoutMain->addSpacing(20);
    m_pLayoutMain->addWidget(m_pComboBox, 0, Qt::AlignCenter);
    m_pLayoutMain->addStretch();
    m_pLayoutMain->setMargin(0);

    // 连接信号槽
    connect(m_pComboBox, static_cast(&QComboBox::currentIndexChanged), [=](int index) {
        QString language_qm;
        if(index == 0)
            language_qm = QString(":/Translate_CH.qm");
        else
            language_qm = QString(":/Translate_EN.qm");

        m_translator->load(language_qm);
        qApp->installTranslator(m_translator); // 安装翻译器
    });

    // 统一设置需要被翻译的文本
    translateUI();
}

// 设置翻译对象
void Translate::setTranslator(QTranslator* translator)
{
    m_translator = translator;
}

// 改变事件:调用installTranslator后,系统会给窗体发送信号触发changeEvent事件
void Translate::changeEvent(QEvent *event)
{
    switch (event->type())
    {
    case QEvent::LanguageChange:
        translateUI();
        break;
    default:
        QWidget::changeEvent(event);
    }
}

// 统一设置需要被翻译的文本
void Translate::translateUI()
{
    m_pLabText->setText(tr("这是需要测试的文本"));
}

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net

相关推荐: 图像处理——连接IP摄像头上传到服务器实现目标识别

前言 1.项目的需求是,本地连接IP摄像头,然后把图像上传到图像处理服务器器进行处理,得到的结果返回本地。 2.IP摄像头使用的是大华的摄像头,目标识别用的yolov5的模型,服务器用的是flask,实现语言是python。 3.在实现过程中,需要先进行IP摄…

Related posts:

  1. 租用新余机柜
  2. 成都服务器托管租用:专业稳定,高效安全。
  3. [oeasy]python0082_颜色设置
  4. 6g服务器托管
  5. 闵行区服务器托管服务详解

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: 【网络】- 计算机网络体系结构 – OSI七层模型、TCP/IP四层(五层)协议 一、概述 二、计算机网络体系结构的形成 三、OSI 参考模型
下一篇: 【技术积累】算法中的基本概念【一】

最新更新

  • 生成式 AI:机会与风险并存,企业该如何取舍?
  • cmd命令常用速记
  • 【Qt6】列表模型——抽象基类
  • 盘点一个Python正则表达式的问题
  • 低代码引擎 TinyEngine 正式发布!!!

随机推荐

  • 什么是服务器托管以及服务器托管有什么用?
  • 2023-06-13:统计高并发网站每个网页每天的
  • 寻找L2TP服务器租用的途径
  • 托管与租用服务器的区别分析
  • 租用服务器空间:您的网站的最佳选择

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8