qt QSettings详解

1、概述

QSettings是Qt框架中用于应用程序配置和持久化数据的一个类。它提供了一种便捷的方式来存储和读取应用程序的设置,如窗口大小、位置、用户偏好等。QSettings支持多种存储格式,包括INI文件、Windows注册表(仅限Windows平台)以及自定义格式。通过使用QSettings,开发者可以轻松实现跨平台的配置管理,无需担心底层存储机制的差异。

2、重要方法

QSettings类提供了丰富的方法来读取和设置配置数据。以下是一些重要的方法:

  • setValue(const QString &key, const QVariant &value):将指定的键值对存储到配置中。
  • value(const QString &key, const QVariant &defaultValue = QVariant()) const:根据键名读取配置值,如果键不存在则返回默认值。
  • contains(const QString &key) const:检查配置中是否存在指定的键。
  • remove(const QString &key):从配置中移除指定的键及其值。
  • sync():将内存中的更改同步到持久化存储中。
  • group() 和 endGroup():用于创建和管理配置中的组(或节),以便更好地组织数据。
3、重要信号

QSettings类本身没有定义特定的信号。但是,由于它通常用于读取和写入配置数据,因此开发者可能会在实现配置更改时自行定义信号来通知其他组件配置已更新。例如,当某个设置被更改时,可以发出一个信号来通知UI组件刷新其显示。

4、常用枚举类型

QSettings类没有定义自己的枚举类型,但它使用了Qt框架中其他类的一些枚举类型,例如QVariant来存储和读取各种类型的数据。此外,QSettings的构造函数接受一个QSettings::Format枚举值来指定存储格式,该枚举包括:

  • QSettings::IniFormat:使用INI文件格式存储配置数据。
  • QSettings::NativeFormat:在Windows上使用注册表,在其他平台上使用INI文件。
  • QSettings::CustomFormat:允许开发者指定自定义的存储格式。
#include <QApplication>
#include <QSettings>
#include <QDebug>

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

    // 设置组织名称和应用名称
    QCoreApplication::setOrganizationName("MyCompany");
    QCoreApplication::setApplicationName("MyApp");

    // 创建 QSettings 对象
    QSettings settings;

    // 写入设置
    settings.setValue("MainWindow/size", QSize(800, 600));
    settings.setValue("MainWindow/pos", QPoint(100, 100));
    settings.setValue("user/name", "John Doe");
    settings.setValue("user/age", 30);

    // 创建数组形式的设置
    settings.beginWriteArray("recent_files");
    for (int i = 0; i < 3; ++i) {
        settings.setArrayIndex(i);
        settings.setValue("path", QString("file%1.txt").arg(i + 1));
    }
    settings.endArray();

    // 读取设置
    QSize size = settings.value("MainWindow/size", QSize(400, 300)).toSize();
    QPoint pos = settings.value("MainWindow/pos", QPoint(0, 0)).toPoint();
    QString userName = settings.value("user/name", "Unknown").toString();
    int userAge = settings.value("user/age", 0).toInt();

    qDebug() << "Window size:" << size;
    qDebug() << "Window position:" << pos;
    qDebug() << "User name:" << userName;
    qDebug() << "User age:" << userAge;

    // 读取数组设置
    int arraySize = settings.beginReadArray("recent_files");
    for (int i = 0; i < arraySize; ++i) {
        settings.setArrayIndex(i);
        QString path = settings.value("path").toString();
        qDebug() << "Recent file" << i + 1 << ":" << path;
    }
    settings.endArray();

    // 检查键是否存在
    if (settings.contains("user/name")) {
        qDebug() << "User name exists in settings";
    }

    // 删除某个键
    settings.remove("user/age");

    // 清除所有设置
    // settings.clear();

    return app.exec();
}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智行无忧停车场管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 1.1 项目功能 2.0 用户登录功能 3.0 首页界面 4.0 车辆信息管理功能 5.0 停车位管理功能 6.0 入场登记管理功能 7.0 预约管理功能 8.0 收费规则功能 9.0…

openssl使用哈希算法生成随机密钥

文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中…

【PlantUML系列】序列图(二)

目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如&#xff1a; Actor&…

从excel数据导入到sqlsever遇到的问题

1、格式问题时间格式&#xff0c;excel中将日期列改为日期未生效&#xff0c;改完后&#xff0c;必须手动单击这个单元格才能生效&#xff0c;那不可能一个一个去双击。解决方案如下 2、导入之后表字段格式问题&#xff0c;数据类型的用navicat导入之后默认是nvarchar类型的&a…

On-Chip-Network之router微架构的物理实现

Low-Power Microarchitecture 自20世纪90年代以来&#xff0c;功耗一直是嵌入式芯片和高性能芯片面临的一个挑战。自2000年代中期以来&#xff0c;它已经成为大多数设计的主要约束。多核解决了功耗问题&#xff0c;由此产生的communication substrate&#xff0c;namely the on…

路径规划之启发式算法之四:蚁群算法(Ant Colony Optimization,ACO)

蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式搜索算法&#xff0c;由Marco Dorigo于1992年在他的博士论文中提出。该算法适用于解决组合优化问题&#xff0c;如旅行商问题&#xff08;TSP&#xff09;、车辆路径问题…

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…

RabbitMQ消息可靠性保证机制6--可靠性分析

在使用消息中间件的过程中&#xff0c;难免会出现消息错误或者消息丢失等异常情况。这个时候就需要有一个良好的机制来跟踪记录消息的过程&#xff08;轨迹溯源&#xff09;&#xff0c;帮助我们排查问题。 在RabbitMQ中可以使用Firehose实现消息的跟踪&#xff0c;Firehose可…

工业—使用Flink处理Kafka中的数据_ProduceRecord1

1 、 使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入Redis 中, key 值为

前端上传后端接收参数为null

记录一下工作中的问题 前端明明把文件传到后台了&#xff0c;但是后台接收参数为null 原因&#xff1a; 前端上传文件的name和后端接收参数名称不匹配 前端 后端 把前端上传的name由upfile改为file即可 本来是很基本的小问题&#xff0c;但因为自己钻了牛角尖一直没搞定&…

CSS3 布局样式及其应用

深入探讨 CSS3 布局样式及其应用 引言 在现代网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;不仅是设计视觉样式的工具&#xff0c;也是布局的核心技术。CSS3引入了新的布局模型&#xff0c;其中Flexbox与Grid布局在满足复杂布局需求方面表现尤为出色。本文将…

spark sql 环境安装,java 默认路径和 安装配置!

yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…

Android渗透环境配置教程

工具 模拟器 ADB brew install android-platform-tools set import cert # cer 证书转为 pem 证书 openssl x509 -inform DER -in cacert.der -out cacert.pem# 获取证书的 hash 值 hash$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -n 1)# 将 pem…

基于遗传优化SVM的电机参数预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 数据收集与预处理 4.2模型构建与训练 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 输入&#xff1a;电机结构参数x1 x2 x3 x4 x5(分别是铁心高度 铁心厚度 绕组…

【开源代码】图像水印移除-依赖python-tensorflow

下载源码 git clone https://github.com/zuruoke/watermark-removal创建conda环境 conda create -n tensorflow_gpu python=3.7 conda activate tensorflow_gpu conda install tensorflow-gpu==1.15

汇编语言学习-二

好吧&#xff0c;已经隔了两天&#xff0c;下完班看了两天&#xff0c;在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统&#xff1b; 这个第二天应该是称为第二章更为合适&#xff0c;目前第二章已经看完&#xff0c;基本的命令也是敲了敲&#xff1b; 下面就进行一…

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?

在选择即时通讯软件时&#xff0c;应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异&#xff0c;因此总结两个点简要分析这两种选择&#xff0c;有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…

【算法】图论——树的重心

目录 题目解析 算法原理 图的存储 算法实现 题目解析 题目解析 给定一颗树&#xff0c;树中包含n个结点&#xff08;编号&#xff09;和n-1条无向边。请找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 什么是重心&#xff1f; 重…

【Vue3 ElementUI开发环境搭建】

VUE搭建关系系统 1. 安装vue脚手架工具2. 使用脚手架创建项目2.1 选择VUE版本2.2 启动demo2.3 vue工程搭建完的目录 3. 安装Element UI3.1 测试ElementUI3.1.1 更换Demo页面的内容3.1.2 引入ElementUI的样式表 1. 安装vue脚手架工具 npm install -g vue/cli执行命令后等他跑一…