当前位置: 首页 > article >正文

QT笔记——多语言翻译

文章目录

    • 1、概要
    • 2、多语言切换
      • 2.1、结果展示
      • 2.2、创建项目
      • 2.2、绘制UI
      • 2.2、生成“.st”文件
      • 2.4、生成“.qm”文件
      • 2.5、工程demo

1、概要

借助QT自带的翻译功能,实现实际应用用进行 “多语言切换”

2、多语言切换

2.1、结果展示

多语言切换

2.2、创建项目

1、文件,创建“新项目”————》“Application”————》“Qt Widgets Application”;
2......

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

2.2、绘制UI

1)、菜单栏创建“QMenu”,模拟正常软件控件布局;
(2)、QMenu直接双击,输入对应的命名昵称,按键盘“Enter”键才会生效(有点bug哈);
(3)、创建QMenu下的QAction时,命名需要复制粘贴进去,再“Enter”键,直接输入不生效;
(4)、简单拖入两个QLable按钮,便于直观看到效果;

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

2.2、生成“.st”文件

    (1)、在.pro工程目录下,手动创建“translate”文件夹,用于存放需要添加的语种的.ts文件;

//注意这里的.ts文件名称是你自己命名的,自己记住那个语言对应哪个文件即可,一般习惯上使用各语种的简写,后续载入对应的qm语言文件做到对应正确就行。
//当前因为选中语种为“中文、英文、日语”,故命名如下所示;
TRANSLATIONS += \translate/LanguageTest_cn.ts\translate/LanguageTest_en.ts\translate/LanguageTest_jp.ts

在这里插入图片描述
    (2)、在QT菜单栏,选中“工具”——》选中“外部”——》选中“QT语言家”——》单机“lupdate”工具;
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.4、生成“.qm”文件

1)、找到安装目录下“bin”文件中的“linguist.exe”工具;
(2)、 双击“linguist.exe”工具,将QT生成的“.ts”文件拖入其中;
(3)、根据需要,进行对应的翻译,直达所有的控件皆翻译完成,如下图所示;
(4)、单机“linguist.exe”菜单栏中的“文件”,选择“保存”并“全部另存为”;

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

2.5、工程demo

//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QString>
#include <QDebug>
#include <QApplication>
#include <QTranslator>
#include <QFileInfo>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onMenulanguageTriggered(QAction *action);  //UI按钮触发,切换翻译void onLanguageTrans(int index);  //加载翻译的.qm文件private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->menu_language, &QMenu::triggered, [&](QAction *action) {onMenulanguageTriggered(action);});  //UI切换按钮,就直接触发“onMenulanguageTriggered()”函数,获取QMenu当前被选中的QAction
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onLanguageTrans(int index)
{static QTranslator* translator;  //初始化QT自带的翻译类“QThranslator”if(translator!=NULL){qApp->removeTranslator(translator);delete translator;translator=NULL;}translator=new QTranslator();QString strLanguagePath;switch (index) {case 1:// chinesestrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_cn.qm";break;case 2:// EnglishstrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_en.qm";break;case 3://jpstrLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_jp.qm";break;}if(translator->load(strLanguagePath))  //判断.qm文件是否加载成功{qApp->installTranslator(translator);//用于将指定的翻译器安装到应用程序中。安装后,应用程序在显示文本时会优先使用该翻译器提供的翻译文本。this->ui->retranslateUi(this);//用于重新翻译当前界面上的所有控件文本。当翻译器安装成功后,调用这个函数可以使界面上的文本立即更新为新的翻译内容。}else{qDebug()<<"load failed";}
}void MainWindow::onMenulanguageTriggered(QAction *action)
{//刷新语言// 获取菜单中所有动作的列表QList<QAction *> actionList = ui->menu_language->actions();// 查找触发动作在列表中的索引int index = actionList.indexOf(action);if (index != -1){onLanguageTrans(index);qDebug() << "Triggered action index: " << index;} else{qDebug() << "Action not found in menu.";}
}

相关文章:

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能&#xff0c;实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…...

oracle 基础语法复习记录

Oracle SQL基础 因工作需要sql能力&#xff0c;需要重新把sql这块知识重新盘活&#xff0c;特此记录学习过程。 希望有新的发现。加油&#xff01;20250205 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVIN…...

php 接入扣子的 token获取

本身逻辑只是个api&#xff0c;但是官方不提供php的sdk 扎心了老铁&#xff0c;这下php 狗都不用了&#xff0c;主要麻烦的是如何获取access_token&#xff0c;代码如下 protected function get_jwt(): string{$header [alg > RS256,typ > JWT,kid > $this->kid];…...

网络工程师 (22)网络协议

前言 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合&#xff0c;它规定了通信时信息必须采用的格式和这些格式的意义。 一、基本要素 语法&#xff1a;规定信息格式&#xff0c;包括数据及控制信息的格式、编码及信号电平等。这是协议的基础&#xff0c;确…...

【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…...

Milvus 存储设计揭秘:从数据写入到 Segment 管理的全链路解析

作为一款云原生向量数据库&#xff0c;Milvus 的高效查询性能有赖于其独特的存储架构设计。然而&#xff0c;在实际使用过程中&#xff0c;许多社区用户常常会遇到以下问题&#xff1a; 为什么频繁调用 flush 后&#xff0c;查询速度会变慢&#xff1f; 数据删除后&#xff0c;…...

Redis双写一致性(数据库与redis数据一致性)

一 什么是双写一致性&#xff1f; 当修改了数据库&#xff08;MySQL&#xff09;中的数据&#xff0c;也要同时更新缓存&#xff08;redis&#xff09;中的数据&#xff0c;缓存中的数据要和数据库中的数据保持一致 双写一致性&#xff0c;根据业务对时间上的要求&#xff0c;…...

14.PPT:中国注册税务师协会宣传【26】

目录 NO12 NO3/4/5​ NO678​ 【文本框水平/垂直居中】【文本框内容水平/垂直居中】 NO12 坑&#xff1a;注意❗Word文档的PPt素材.docx的标题大纲是混乱的&#xff0c;虽然他设置了&#xff0c;所以我们需要重新设置 设计→主题视图→幻灯片母版→删除版式插入logo NO3/4…...

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_write_stderr函数

定义 在ngx_log.h 中 static ngx_inline void ngx_write_stderr(char *text) {(void) ngx_write_fd(ngx_stderr, text, ngx_strlen(text)); } 在开发软件时&#xff0c;尤其是像 Nginx 这样复杂的服务器软件&#xff0c;开发者需要一种方法来输出调试信息或者错误信息。这段代码…...

使用requestAnimationFrame减少浏览器重绘

文章目录 介绍使用使用rAF前使用rAF后 介绍 在屏幕中&#xff0c;浏览器通常都以60FPS&#xff08;1/60 s&#xff09;每帧更新屏幕&#xff0c;但是当前端绑定了一些高频事件&#xff0c;如鼠标移动&#xff0c;屏幕滚动、触摸滑动等时&#xff0c;在一帧的周期内&#xff0c;…...

autMan奥特曼机器人-对接deepseek教程

一、安装插件ChatGPT 符合openai api协议的大模型均可使用此插件&#xff0c;包括chatgpt-4/chatgpt-3.5-turbo&#xff0c;可自定义服务地址和模型&#xff0c;指令&#xff1a;gpt&#xff0c;要求Python3.7以上&#xff0c;使用官方库https://github.com/openai/openai-pyt…...

一个精简完整的全栈电商平台采用现代化技术栈和安全架构

以下是一个精简但完整的全栈电商平台实现,采用现代化技术栈和安全架构: 架构设计 前端:SvelteKit + TypeScript (SSR/SSG) 后端:Go 1.21 + Fiber框架 数据库:MySQL 8.0 + Redis 7.0 安全:Cloudflare WAF + JWT+HTTPOnly+Secure Cookie 部署:Docker Swarm + Traefik (自…...

数据分析:企业数字化转型的金钥匙

引言&#xff1a;数字化浪潮下的数据金矿 在数字化浪潮席卷全球的背景下&#xff0c;有研究表明&#xff0c;只有不到30%的企业能够充分利用手中掌握的数据&#xff0c;这是否让人深思&#xff1f;数据已然成为企业最为宝贵的资产之一。然而&#xff0c;企业是否真正准备好从数…...

MySQL中datetime类型23:59:59变成下一天的00:00:00

1. 现象 公司项目中有一个统计的业务需求&#xff0c;需要记录数据的开始和结束时间点&#xff0c;对应的是MySQL表中的datetime类型。结束时间是当天的23:59:59&#xff0c;但是java程序中是对的时间&#xff0c;但是Mybatis-plus入库了之后查看数据库却变成第二天的00:00:00&…...

玩转Docker | 使用Docker部署httpd服务

玩转Docker | 使用Docker部署httpd服务 前言一、准备工作环境确认检查操作系统准备网站目录和配置文件二、拉取httpd镜像三、运行httpd容器运行容器命令检查容器状态四、验证httpd服务浏览器访问测试错误排查五、容器管理与维护查看容器状态停止和启动容器更新网站内容和配置六…...

Vue 双向数据绑定的原理

Vue 的双向数据绑定是其核心特性之一&#xff0c;它可以让视图与数据保持同步&#xff0c;简化了开发者在 DOM 操作上的工作。Vue 的双向数据绑定通过 响应式系统 和 DOM 事件监听 来实现&#xff0c;当数据发生变化时&#xff0c;视图会自动更新&#xff1b;当视图中的元素&am…...

Spring Web MVC项目的创建及使用

一、什么是Spring Web MVC&#xff1f; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中&#xff0c;通常被称为Spring MVC。 1.1 MVC的定义 MVC 是 Model View Controller 的缩写&#xff0c;它是软件工程中的一种软件架构…...

32.日常算法

1.最大子数组和 题目来源 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,…...

MySQL的底层原理与架构

前言 了解MySQL的架构和原理对于很多的后续很多的操作会有很大的帮助与理解。并且很多知识都与底层架构相关联。 了解MySQL架构 通过上面的架构图可以得知&#xff0c;Server层中主要由 连接器、查询缓存、解析器/分析器、优化器、执行器 几部分组成的&#xff0c;下面将主要…...

python Excel 表读取合并单元格以及清除空格符

读取合并单元格并保留合并信息 读取合并单元格并保留合并信息清除各单元格的空格和换行符&#xff0c;并去除列名中的空格和换行符 读取合并单元格并保留合并信息 当我们只是使用 pandas 的 read_excel 方法读取 Excel 文件时&#xff0c;我们可能会遇到一个很棘手的问题&…...

Node.js 实现简单爬虫

介绍 爬虫是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。 本文将使用 Nodejs 编写一个简单的爬虫脚本&#xff0c;爬取一个美食网站&#xff0c;获取菜品的标题和图片链接&#xff0c;并以表格的形式输出。 准备工作 1、初始化项目 首先&#xff0…...

【Pytorch】nn.RNN、nn.LSTM 和 nn.GRU的输入和输出形状

nn.RNN、nn.LSTM 和 nn.GRU的输入和输出形状 输入形状通用输入参数特殊情况&#xff08;LSTM&#xff09; 输出形状nn.RNN 和 nn.GRUnn.LSTM 代码示例 输入形状 通用输入参数 这三个模块通常接收以下两种形式的输入&#xff1a; 输入序列&#xff1a;形状为 (seq_len, batch…...

代码随想录算法训练营第三十一天| 回溯算法04

491. 递增子序列 题目&#xff1a; 代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili 这题需要注意的点&#xff1a; 1. path长度在2以上才放入最终结果 2. 需要记录已经使用过的数字&am…...

2024.1版android studio创建Java语言项目+上传gitee

1.在gitee上创建仓库 Gitee 创建仓库并邀请成员指南_gitee创建仓库邀请成员-CSDN博客 见1 2.新建android studio项目 3.在Android studio配置gitee Android Studio提交代码到gitee仓库_android log in to gitee-CSDN博客 其中的一二步 p.s.添加gitee账户选择password时&a…...

React 打印插件 -- react-to-print

一、安装依赖 npm install react-to-print 二、使用 import { useReactToPrint } from "react-to-print"; import React, { useRef, forwardRef } from react;const Content () > {const contentRef useRef(null);const reactToPrintFn useReactToPrint({ c…...

opentelemetry-collector 配置elasticsearch

一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …...

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...

C# SQlite使用流程

前言 不是 MySQL 用不起&#xff0c;而是 SQLite 更有性价比&#xff0c;绝大多数的应用 SQLite 都可以满足。 SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎&#xff0c;它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机…...

MySQL数据库 (三)- 函数/约束/多表查询/事务

目录 一 函数 (一 字符串函数 (二 数值函数 (三 日期函数 (四 流程函数 二 约束 (一 概述 (二 约束演示 (三 外键约束 三 多表查询 (一 多表关系 1 一对多&#xff08;多对一&#xff09; 2 多对多 3 一对一 (二 多表查询概述 (三 内连接 1 查询语法 2 代码实…...