QT通用配置文件库(QPreferences)

news2024/12/23 18:27:28

QT通用配置文件库(QPreferences)

QPreferences项目是基于nlohmann/json的qt可视化配置文件库,将配置保存成json格式,并提供UI查看与修改,可通过cmake可快速添加进项目。默认支持基本类型、stl常用容器、基本类型与stl容器组成的结构体,若想添加不支持的类型,可参考nlohmann/json自行实现to_json和from_json函数。
QPreferences - github源码

项目使用步骤

1. 创建配置文件结构体

QPREFERENCES_STRUCT(配置结构体名, 配置文件路径
                    , 类型1, 变量名1, 默认值1
                    , 类型2, 变量名2, 默认值2
                    ...
)

注意事项:

  • 配置文件路径可写绝对路径或相对路径,若为子配置结构体则写""
  • 变量名需要与json文件中的元素命名相同,否则会加载失败
  • 默认值必须要加括号,参考下一节示例
  • 最多支持40个变量(若不够则使用结构体嵌套,结构体算一个变量)

2. 在程序开头加载配置文件

        通过上面的宏定义创建的结构体会继承QPreferences,QPreferences是一个单例类保证了全局只有一个配置结构体变量,通过GetInstance()接口返回配置结构体指针。QPreferences有三个可继承调用的成员函数load()save()showUI(),功能分别为加载、保存、显示配置文件。
        一般情况下,我们需要在程序开头调用load(),否则参数都是默认值。当设置了配置文件路径且硬盘不存在该文件时,会自动创建json配置文件并写入默认值。创建配置文件在构造函数里判断是否要创建,一定会在执行load()之前,所以在程序开头放心load就好。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Preferences::GetInstance()->load();
}

3. 将显示接口写入对应动作

void MainWindow::on_pushButton_clicked()
{
    Preferences::GetInstance()->showUI();
}

示例

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "Preferences.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Preferences::GetInstance()->load();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    Preferences::GetInstance()->showUI();
}


Preferences.h源码

#pragma once

#include <QPreferences.hpp>
#include <vector>
#include <string>

QPREFERENCES_STRUCT(SubPref, ""
                    , int           , sub_option1, (0)
                    , double        , sub_option2, (5.0)
                    , std::string   , sub_option3, ({"wizalm"})
                    )

QPREFERENCES_STRUCT(Preferences, "Preferences/Preferences.json"
                    , int               , option1   , (1)
                    , double            , option2   , (2)
                    , std::vector<int>  , option3   , ({1, 2, 3})
                    , SubPref           , sub_pref  , ()
                    )

配置文件显示,双击可修改,会修改后会判断输入值是否与原本类型兼容,若不兼容则输入无效。
QPreferences的UI显示图片

QPreferences_demo

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

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

相关文章

C#知识|账号管理系统:添加账号的功能笔记

哈喽,你好啊,我是雷工! 本节记录账号管理系统中添加账号的逻辑过程,以下为学习笔记。 01 实现内容 ①:实现当点击【保存到数据库】按钮时,将账号名称、原创篇数、账号简介、账号类型显示的内容存储到LGAccountManagerDB数据库的Account表中; ②:实现点击【保存到数据库…

手势控制机械手

机械手的手势控制 思路: 1 通过摄像头实现手势识别 2 将识别后的手势数据通过计算拇指与中指指尖的距离计算出舵机需要旋转的角度 3 将数据通过mqtt发送给mqtt服务器 4 硬件通过mqtt获取需要旋转的角度控制舵机旋转 开发环境: 硬件: ESP8266、舵机 硬件代码: 软件环…

颗粒饲料机器,打造成套饲料生产线

无论您是大型养殖场还是小型养殖户&#xff0c;我们的颗粒饲料机器能满足您的需求。我们致力于为客户打造成套饲料生产线&#xff0c;让您在养殖业中脱颖而出。 &#x1f680; 开启养殖新时代&#xff0c;您的饲料生产线升级设备&#xff01; 还在为饲料生产烦恼吗&#xff1f…

【笔记-MyBatis】StatementHandler

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-15 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 简介 StatementHandler封装了对JDBC各类Statement的操作&#xff0c;如设置fetchSize属性、设置查询超时时间、与数据库进行交互等&…

第一节Linux常见指令

目录 1.Linux下基本指令 ls指令 pwd 命令 cd 指令 知识点:理解树形结构 touch 指令 mkdir指令(重要) rmdir指令 && rm指令(重要) 知识点:ls file* 可以找到当前目录下任何以file开头的文件​编辑 知识点:热键 man指令()重要 补充知识点:nano cp…

解锁Mac与Windows无缝协作新纪元:Tuxera NTFS for Mac 2022 —— 高效读写,畅享双系统自由

Tuxera NTFS for Mac 2022&#xff0c;作为一款专为Mac用户设计的文件系统驱动插件&#xff0c;它彻底打破了Mac与Windows之间在文件读写上的界限&#xff0c;为用户带来了前所未有的跨平台体验。 这款插件让Mac用户能够轻松访问、读取并写入NTFS格式的硬盘或U盘&#xff0c;无…

C++第七弹 -- C/C++内存管理

目录 前言一. C/C内存分布二. C语言中动态内存管理方式三. C中动态内存管理四. operator new与operator delete函数五. new和delete的实现原理1.内置类型2. 自定义类型 六. 定位new表达式(placement-new)七. 常见面试题总结 前言 在C/C编程中&#xff0c;内存管理是至关重要的…

jwt复习及ctfshow做题

Jwt复习总结 JWT简介 JWT即Json Web Token的缩写&#xff0c;顾名思义&#xff0c;是Token的一种。它常被用来在向服务器发起请求时用作身份认证。使用JWT作为身份认证的优势在于&#xff1a;它不需要在服务端去保留用户的认证信息。仅需要对该Token正确性进行校验即可,这就意…

张量分解(4)——SVD奇异值分解

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

那一单,教会我的不只是后悔

在销售行业中&#xff0c;每一笔成交都是一场精心策划的战役。每一个细节、每一次沟通都需要谨慎处理&#xff0c;以防辛苦建立的信任大厦瞬间崩塌。然而&#xff0c;即便是最小心谨慎的人也难免会犯错。我的一位好友&#xff0c;我们姑且称他为杰克&#xff0c;在一次不经意间…

实战篇(九):解锁3D魔方的秘密:用Processing编程实现交互式魔方

解锁3D魔方的秘密:用Processing编程实现交互式魔方 使用 Processing 创建一个 3D 魔方效果展示1. 安装 Processing2. 项目结构3. 代码实现4. 代码解释4.1. 初始化魔方4.2. 绘制魔方4.3. 处理鼠标事件4.4. 检查点击的面4.5. 旋转面和最终确定旋转5. 运行和测试6. 细节解释6.1. …

数据精度丢失

js数据精度丢失 最近看面试题想到了之前在开发钟遇到过的问题&#xff0c;现总结一下 在开发过程中&#xff0c;发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查&#xff0c;怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为…

I/O多路复用:解锁服务器高性能的钥匙

文章目录 I/O 多路复用引言I/O 多路复用&#xff1a;并发处理的艺术介绍I/O多路复用的意义Linux下的I/O多路复用机制总结 文件描述符&#xff08;fd&#xff09;&#xff1a;连接的桥梁概述文件描述符的作用文件描述符的生命周期特殊的文件描述符文件描述符与I/O多路复用 套接字…

数据结构—链式二叉树-C语言

代码位置&#xff1a;test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 在现实中搜索二叉树为常用的二叉树之一&#xff0c;今天我们就要通过链表来实现搜索二叉树。实现的操作有&#xff1a;建二叉树、前序遍历、中序遍历、后序遍历、求树的节点个数、求…

路径规划 | 基于DQN深度强化学习算法的路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 DQN路径规划算法 基于深度强化学习算法的路径规划 matlab2023b 栅格环境&#xff0c;走迷宫&#xff0c;可以通过窗口界面方便观察交互过程&#xff0c;代码注释详尽。 程序设计 完整源码和数据私信博主回复基于DQN深…

什么是大数据信用?它的作用有哪些?怎么查询大数据?

在金融行业中&#xff0c;风险管理是至关重要的一环。传统的信用评估方法主要基于借款人的财务状况和信用历史&#xff0c;但这些信息往往无法全面反映借款人的信用状况。大数据信用的出现为金融风控提供了新的解决方案。 首先&#xff0c;大数据信用可以为金融机构提供更全面的…

flutter实现语言的国际化

目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 ​编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程&#xff0c;在Project的info里面添加语言 2.创建String File文件 2.andr…

运维管理数智化:数据与智能运维场景实践

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay 摘要&#xff1a;笔者根据自身的技术和行业理解&#xff0c;分享嘉为蓝鲸数据与智能运维场景实践。 涉及关键字&#xff1a;一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。 本文作者&#xf…

vue2迁移到vue3注意点

vue2迁移到vue3注意点 1、插槽的修改 使用 #default &#xff0c; 以及加上template 模板 2、 类型的定义&#xff0c;以及路由&#xff0c;vue相关资源&#xff08;ref, reactive,watch&#xff09;的引入等 3、类装饰器 1&#xff09;vue-class-component是vue官方库,作…

ActiveMQ-CVE-2023-46604

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActvieMQ5.18.2版本以及以前&#xff0c;OpenWire协议通信过程中存在一处反序列化漏洞&#xff0c;该漏洞可以允许具有网络访问权限的远程攻击者通过操作…