Qt中英文切换(涉及多种场景)

news2024/11/24 19:44:50

qt中英文切换涉及到一个软件两个文件,分别是QtLinguist、.ts文件和.qm文件。

1、在Pro中添加

TRANSLATIONS += en.ts \
               ch.ts

添加这个文件后qmake,然后如下操作点击更新:
在这里插入图片描述
这个时候会生成2两个文件en.ts和ch.ts。
在这里插入图片描述
2、将这两个文件添加到项目中方便修改。
在这里插入图片描述
3、这个时候我们可以在工程中进行准备工作了。
首先把代码中除.ui文件外的所有中文使用tr()括起来,使Qt Linguist能够识别到。
然后如下操作
在这里插入图片描述
使用QtLinguist方式打开。
在这里插入图片描述
找出所有需要翻译的中文,在下面输入栏中进行翻译。
翻译后点击以下操作进行确定。在这里插入图片描述
然后点击保存。
在这里插入图片描述
最后如下进行发布。
在这里插入图片描述
发布后会生成两个.qm文件。
将文件放在执行文件同级目录,方便后面进行加载。
在这里插入图片描述
4、加载qm文件实时切换中英文。

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
}

这步完成后基本上只有主页在.ui文件中的控件可以实时中英文切换,但是还有很多切换没有成功。

4、这个时候有其它场景的中英文切换如下。
场景1:UI文件中的控件翻译,其它页面的.ui需要进入事件来进行配置。如下

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
    }
}

场景2:主页和其它页非.ui文件中的控件(控件为成员对象时)

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
        ui->label->setText(tr("你好"));
        ui->label_3->setText(tr("测试2"));
    }
}

跟上面是不是很像,没错就是大部分一样,但是

this->ui->retranslateUi(this);

它只能修改.ui中的中英文,非.ui的需要自己来加载。

场景3:主页和其它页非.ui文件中的控件(控件为局部对象时)
这个就是控件在函数里面创建,翻译方法如下:

Form2::Form2(QWidget *parent) :
    QWidget(parent)
{
    QLabel* lab = new QLabel(tr("武汉加油"),this);
    lab->setGeometry(0,0,120,20);

    QPushButton* btn = new QPushButton(tr("武汉加油"),this);
    btn->setGeometry(0,30,120,20);
}

Form2::~Form2()
{
}

void Form2::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        QList<QLabel *> labs =this->findChildren<QLabel *>();
        foreach (QLabel *lab, labs)
        {
          lab->setText(tr("武汉加油"));
        }

        QList<QPushButton *> btns =this->findChildren<QPushButton *>();
        foreach (QPushButton *btn, btns)
        {
          btn->setText(tr("武汉加油"));
        }
    }
}

以上是介绍实时中英切换的,但是同时存在一个中文版本和一个英文版本是没有这么复杂的,直接加载.qm文件就行了,后面操作基本上都不需要了。

这里还介绍一个更简单的实时切换中英文的方法:
如下:
.cpp文件

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();
}

main.cpp文件:

    UMainWindow w;
    w.show();
    bool ok = a.exec();
    f(!ok)
    {
        QProcess::startDetached(qApp->applicationFilePath(), params);
        return ok;
    }

这种是通过自动重启来实现的中英文切换。

在这里插入图片描述
在这里插入图片描述
源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ : 构造函数 析构函数

&#x1f535;前提引入 &#xff1a; 1如果一个类中什么成员都没有&#xff0c;称为空类&#xff0c;但空类并非什么都没有&#xff0c;在我们没有写任何东西时&#xff0c;编译器会自动生成6个默认成员函数。 2.默认成员函数 &#xff1a; 用户没有显式实现&#xff0c;编译器…

Redis快速上手

Redis快速上手 OVERVIEWRedis快速上手1.redis数据类型2.redis常用命令StringListSetSortedSetHashKey相关3.redis配置文件4.redis数据持久化5.hiredis使用连接数据库执行redis命令函数释放资源程序实例1.redis数据类型 key: 必须是字符串 - “hello” value: 可选的 String类型…

核心业务5:充值业务实现

核心业务5:我要充值 1.充值业务流程图 2.充值业务流程逻辑 3.数据库表 4.前端逻辑代码 5.汇付宝代码逻辑 6.尚融宝代码逻辑 7.幂等性判断原理和解决方案 8.代码规范和原理了解 核心业务5:我要充值 1.充值业务流程图

基于springboot的在线考试系统源码数据库论文

目 录 目 录 第一章 概述 1.1研究背景 1.2 开发意义 1.3 研究现状 1.4 研究内容 1.5论文结构 第二章 开发技术介绍 2.1 系统开发平台 2.2 平台开发相关技术 2.2.1 Java技术 2.2.2 mysql数据库介绍 2.2.3 MySQL环境配置 2.2.4 B/S架构 2.2.5 Spr…

如何在Linux系统中使用 envsubst 命令替换环境变量?

在Linux系统中&#xff0c;环境变量是非常常见的一种机制&#xff0c;它们被用于存储重要的系统信息&#xff0c;比如用户的登录名、路径等等。当在脚本中需要使用这些变量时&#xff0c;可以使用envsubst命令&#xff0c;该命令可以将环境变量的值替换到文本文件中。 本文将介…

低静态电流-汽车电池反向保护系统的方法

低静态电流-汽车电池反向保护系统的方法 背景 车辆中电子电路数量不断增加&#xff0c;使得需要消耗的电池电量也随之大幅增长。为了支持遥控免钥进入和安全等功能&#xff0c;即使在汽车停车或熄火时&#xff0c;电池也要持续供电。 由于所有车辆都使用有限的电池供电&…

三轴XYZ平台生成gcode文件

1. 生成gcode坐标文件 gcode文件中保存的是需要绘制图形的路径信息&#xff0c;这里我们采用开源矢量图形编辑软件 Inkscape并通过Unicorn G-Code插件来生成 gcode坐标文件。 将软件资料包\Inkscape.rar 压缩文件解压到电脑上任意磁盘&#xff0c;软件内已安装 Unicorn G-Code插…

【花雕学AI】深度挖掘ChatGPT角色扮演的一个案例—CHARACTER play : 莎士比亚

CHARACTER play : 莎士比亚 : 52岁&#xff0c;男性&#xff0c;剧作家&#xff0c;诗人&#xff0c;喜欢文学&#xff0c;戏剧&#xff0c;爱情 : 1、问他为什么写《罗密欧与朱丽叶》 AI: 你好&#xff0c;我是莎士比亚&#xff0c;一位英国的剧作家和诗人。我很高兴你对我的…

【论文速览】图像分割领域的通用大模型SegGPT - Segmenting Everything in Context

文章目录研究背景解决思路PainterSegGPT实验效果&#xff08;部分&#xff09;思考参考资料代码地址&#xff1a;https://github.com/baaivision/Painter Demo地址&#xff1a;https://huggingface.co/spaces/BAAI/SegGPT 研究背景 图像分割一直是计算机视觉领域的一项基础研究…

Free container identify , CIMCAI container detect cloud service

集装箱箱号识别API免费&#xff0c;中国上海人工智能企业CIMCAI飞瞳引擎™集装箱人工智能平台全球近4千企业用户&#xff0c;全球领先的飞瞳引擎™AI集装箱识别云服务&#xff0c;集装箱残损识别箱况检测缺陷检验&#xff0c;小程序拍照检测或支持API接口二次开发&#xff0c;应…

数据结构初阶(算法的复杂度 + 包装类 + 泛型)

文章目录一、算法复杂度1. 算法效率2. 时间复杂度&#xff08;1&#xff09; O的渐进表示法3. 空间复杂度二、包装2.1 为什么会出现包装2.2 分类2.3 装箱和拆箱&#xff08;1&#xff09;装箱/装包&#xff08;2&#xff09;拆箱/拆箱三、泛型3.1 泛型的基本概念3.2 泛型的使用…

2023 年 3 月 GameFi 月度报告

作者&#xff1a;danielfootprint.network 数据来源&#xff1a;Monthly GameFi Report 三月的 GameFi 世界相对沉寂&#xff0c;没有重大的消息公开&#xff0c;没有亮眼的游戏出现&#xff0c;也没有死亡螺旋的发生。 GameFi 领域的重要名字 Splinterlands 和 Hive 开始面…

Redis一主二从搭建

Redis一主二从环境搭建 一主二从 准备工作 安装VMWare 下载镜像 创建下面的目录 Redis-Cluster master mastervmdk slave00 slave00vmdk slave01 slave00vmdk VMWare中安装CentOS7 自定义(高级) 默认 安装程序光盘映像文件 命名虚拟机&#xff0c;选择我们刚才创建的…

ASEMI代理ADAU1961WBCPZ-R7原装ADI车规级ADAU1961WBCPZ-R7

编辑&#xff1a;ll ASEMI代理ADAU1961WBCPZ-R7原装ADI车规级ADAU1961WBCPZ-R7 型号&#xff1a;ADAU1961WBCPZ-R7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;LFCSP-32 批号&#xff1a;2023 引脚数量&#xff1a;32 安装类型&#xff1a;表面贴装型 ADAU1961WBCPZ-…

通过简单demo让你秒懂Python的编译和执行全过程

基本说明 python 是一种解释型的编程语言&#xff0c;所以不像编译型语言那样需要显式的编译过程。然而&#xff0c;在 Python 代码执行之前&#xff0c;它需要被解释器转换成字节码&#xff0c;这个过程就是 Python 的编译过程。 DEMO演示讲解 假设我们有以下 Python 代码&…

常见安全设备

文章目录前言安全厂商安全设备种类拓扑图防火墙IDSIPSwaf上网行为管理器数据库审计系统全流量设备蜜罐态势感知前言 最近在了解安全设备的基本原理&#xff0c;简单做一下笔记。 安全厂商 深信服、浪潮、奇安信、绿盟、山石网科、启明星辰、安恒、360、新华3 安全设备种类 …

【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )

文章目录一、元素的显示与隐藏二、display 隐藏对象1、display 隐藏对象语法说明2、display 显示元素代码示例3、display 隐藏元素代码示例三、visibility 隐藏对象1、visibility 隐藏对象语法说明2、visibility 显示对象代码示例3、visibility 隐藏对象代码示例四、overflow 隐…

大数据项目实战之数据仓库:电商数据仓库系统——第5章 数据仓库设计

第5章 数据仓库设计 5.1 数据仓库分层规划 优秀可靠的数仓体系&#xff0c;需要良好的数据分层结构。合理的分层&#xff0c;能够使数据体系更加清晰&#xff0c;使复杂问题得以简化。以下是该项目的分层规划。 5.2 数据仓库构建流程 以下是构建数据仓库的完整流程。 5.2.1 …

在unreal中的基于波叠加的波浪水面材质原理和制作

关于水的渲染模型 如何渲染出真实的水体和模拟&#xff0c;是图形学&#xff0c;游戏开发乃至仿真领域很有意思的一件事 记得小时候玩《Command & Conquer: Red Alert 3》&#xff0c;被当时的水面效果深深震撼&#xff0c;作为一款2008年出的游戏&#xff0c;现在想起它…

RK3399平台开发系列讲解(基础篇)POSIX 定时器

🚀返回专栏总目录 文章目录 一、clockid二、sigevent三、timerid四、flags五、 value & old_value六、POSIX 定时器的优势沉淀、分享、成长,让自己和他人都能有所收获!😄 📢为了克服传统定时器的局限性,POSIX 标准组织设计了新的计时器接口和规范,使它们能提供更…