Qt 使用qm文件

背景:

多个子项目,分别翻译生成的qm文件,如何一键加载?


.h

#include <QtCore/QObject>
#include <QtCore/QTranslator>class LanguageSelector:public QObeject{Q_OBJECT
public:~LanguageSelector() override = default;void setLanguage(const QString &l);QString getLanguage();void addLanguageFile(const QString &n);void removeLanguageFile(const QString &n);void reload();static LanguageSelector *getInstance();
signals:void languageChanged(const QString &l);
privite:LanguageSelector();static LanguageSelector* instance;static constexpr char CONFIGER_KEY[] = "system/language";QString baseDir;QList<QString> languageFiles;QList<QTranslator *> translations;
}

.cpp

#include "languageselector.h"
#include <QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QStringBuilder>
#include <QSettings>LanguageSelector *LanguageSelector::instance = nullptr;
constexpr char LanguageSelector::CONFIGER_KEY[];
QString LanguageSelector::getLanguage()
{return QSettings::value( CONFIGER_KEY, defaultValue );
}void LanguageSelector::setLanguage(const QString &language)
{QSettings qs;auto ov = QSettings::value( CONFIGER_KEY, defaultValue );qs::setValue( CONFIGER_KEY, language);if(ov != l){reload();emit languageChanged( language);}
}LanguageSelector *LanguageSelector::getInstance()
{if(!instance){instance = new LanguageSelector;}return instance;
}LanguageSelector::LanguageSelector(): baseDir( "i18n" ) {}void LanguageSelector::addLanguageFile(const QString &name)
{if(name.isEmpty()){return;}languageFiles.append(name);
}void LanguageSelector::removeLanguageFile(const QString &name)
{if(name.isEmpty()){return;}languageFiles.removeOne(name);
}void LanguageSelector::reload()
{auto language = getLanguage();QString qmBase = QApplication::applicationDirPath() + "/" + baseDir;if(!qmBase.isEmpty() && !qmBase.endWith("/")){qmBase += "/";}if(!translations.isEmpty()){for(auto const t : translations){QCoreApplication::removeTranslator(t);t->deleteLater();}}for(auto const &qm :languageFiles){auto *t = new QTranslator(this);if(t->load(qmBase % qm % "_" % language ))translations.append(t);QCoreApplication::installTranslator(t);}else{qDebug() << "can not load lang file:" << qm << ", language" << language ;}
}


使用:

main中,节目构造之前添加:

      auto ls = LanguageSelector::getInstance();ls->addLangFile( "test" );ls->addLangFile( "local" );ls->addLangFile( "remote" );ls->reload();

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

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

相关文章

IEC104协议

1. 简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2. 术语解释 遥脉 (电度量)&#xff1a; 是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。 其实&#xff0c;遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测…

【软考经验分享】软考-中级-嵌入式备考

这里写目录标题 教辅用书嵌入式系统设计师考试大纲嵌入式系统设计师教程嵌入式系统设计师5天修炼嵌入式系统设计师考前冲刺100题 刷题软件希赛网软考真题 视频教程希赛网王道-计组计网 教辅用书 嵌入式系统设计师考试大纲 50页左右&#xff0c;内容为罗列一些考点&#xff0c…

CentOS 7 二进制方式安装minio单节点 —— 筑梦之路

下载准备minio二进制包 wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio sudo mv minio /usr/local/bin/ minio --version 创建用户和授权 sudo groupadd --system miniosudo useradd -s /sbin/nologin --system -g minio minio 对象存储磁…

使用Gate.io的API来进行提现操作

使用Gate.io的API来进行提现操作。 首先配置了API的授权信息,包括API的主机地址、API密钥和API密钥的密钥。 接下来,创建了一个`gate_api.ApiClient`实例,该实例将使用配置的授权信息进行API调用。 然后,创建了一个`gate_api.WithdrawalApi`实例,用于执行提现操作。 接…

信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】

[TOC](信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】) 前言 信息化相关的工作人员&#xff0c;无论你是开发人员、产品经理、CIO领导&#xff0c;你只要是在做信息化相关的工作&#xff0c;有些基础知识和操作…

C#版Facefusion:让你的脸与世界融为一体!-05 人脸增强

C#版Facefusion&#xff1a;让你的脸与世界融为一体&#xff01;-05 人脸增强 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤&#xff1a; 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcface_w60…

基于MNIST的手写数字识别

上次我们基于CIFAR-10训练一个图像分类器&#xff0c;梳理了一下训练模型的全过程&#xff0c;并且对卷积神经网络有了一定的理解&#xff0c;我们再在GPU上搭建一个手写的数字识别cnn网络&#xff0c;加深巩固一下 步骤 加载数据集定义神经网络定义损失函数训练网络测试网络 …

leetcode-寻找重复数

287-寻找重复数 https://leetcode.cn/problems/find-the-duplicate-number/description/?envTypestudy-plan-v2&envIdtop-100-liked给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存…

小扎万字深度访谈:最强开源大模型Llama 3发布,Meta的AGI路径和开源哲学

今天Meta发布了史上最强开源大模型Llama 3&#xff0c;一口气发布了 8B 和 70B 2个预训练和指令微调模型&#xff0c;对比同级别的参数模型&#xff0c;性能上均达到了最佳。 此外&#xff0c;Meta还发布了基于Llama 3的AI助手Meta AI&#xff0c;可以在Facebook、Instagram、W…

Java使用腾讯翻译api开发app

//这是使用腾讯翻译接口的代码 package com.example.simpleocr; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile; import com.tencentcloudapi.common.exce…

一举颠覆Transformer!最新Mamba结合方案刷新多个SOTA,单张GPU即可处理140k

还记得前段时间爆火的Jamba吗&#xff1f; Jamba是世界上第一个生产级的Mamba大模型&#xff0c;它将基于结构化状态空间模型 (SSM) 的 Mamba 模型与 transformer 架构相结合&#xff0c;取两种架构之长&#xff0c;达到模型质量和效率兼得的效果。 在吞吐量和效率等关键衡量指…

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型 部署AI数字绘画stable-diffusion曲线救国授权github账号 部署ffmpeg-app-v3总结 在讲述了函数计算FC3.0和函数计算FC2.0的操作界面UI改版以及在函数管理、函数执行引擎、自定义域名、函数授权及弹性伸缩规则方面进…

【管理咨询宝藏82】麦肯锡某化工企业战略咨询报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏82】麦肯锡某化工企业战略咨询报告 【格式】PPT版本&#xff0c;可以编辑 【关键词】战略咨询、MBB、业务规划 【核心观点】 - 打造面向客户的…

【格式化日期】在Vue3中如何格式化日期

使用第三方库date-fns格式化处理日期 使用步骤&#xff1a; ① 安装 date-fns&#xff1a; npm install date-fns② 在 Vue 组件中使用 date-fns 来格式化日期&#xff1a; <script setup> import { ref } from vue; // 引入date-fns import { format } from date-fn…

opencv的高斯滤波函数

//1、高斯滤波器 GaussianBlur(NormalX, res1, Size(Ksize, Ksize), Sigma); //2、高斯分离卷积 Mat v getGaussianKernel(Ksize, Sigma); sepFilter2D(NormalX, res2, -1, v.t(), v); //3、普通卷积 filter2D(NormalX, res3, -1, v*v.t()); …

spring注解整理

spring注解整理 Configuration 使用Configuration注解来标注的类为配置类&#xff0c;配置类就相当于applicationContext.xml配置文件&#xff0c;可以在配置类中来配置bean Configurationpublic class MainConfig { /** * bean的类型是返回类型&#xff0c;bean的id默认…

2023-2024年人形机器人行业报告合集(精选397份)

人形机器人行业报告&#xff08;精选397份&#xff09; 2023-2024年 【以下是资料目录】 报告来源&#xff1a;下载教程&#xff08;海选智库&行业资源智库&#xff09; 2024流程工业智能制造机器人业务开启新增长曲线 2024电子皮肤行业深度研究报告&#xff1a;赋予机…

vue用法示例(一)

1、v-html html 插入&#xff0c;可以插入文本&#xff0c;也可以插入元素&#xff0c;如 message:"<h1>xxx</h1>" <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Vue 测试实例 - 菜鸟教程(runo…

mysql基础18——权限管理

权限管理 根据不同的用户进行横向和纵向的分组 横向的分组 用户可以接触到的数据的范围 纵向的分组 用户对接触到的数据能访问到什么程度 把具有相同数据访问范围和程度的用户分为不同的类别 这种类别叫做角色 通过角色对相同权限的用户进行分组管理 可以使权限管理更加简单…

ROS2 仿真学习02 Gazebo导入官方示例模型

1.下载模型 git clone https://gitee.com/bingda-robot/gazebo_models.git将gazebo_models拖到到.gazebo当中&#xff08;如果没看到.gazebo文件请按住CTRLh&#xff09; 2.添加模型到gazebo的Insert 这就将官方示例的模型都导入到Gazebo 了 随便试试一个模型