【Qt之·类QSettings·参数保存】

news2025/1/8 6:06:16

系列文章目录


文章目录

  • 前言
  • 一、概述
    • 1.1 QSetting是什么
    • 1.2 为什么学习QSetting是重要的
  • 二、不同存储位置的优缺点
  • 三、 QSetting的高级用法
  • 四、实例演示
  • 总结


前言

  在当今的应用程序开发中,设置管理是一个至关重要的方面。应用程序的设置包括用户偏好、配置选项和其他关键数据,这些数据需要被保存和恢复,以提供良好的用户体验。Qt框架提供了一个强大而灵活的类,称为QSettings,用于管理和存储应用程序的设置。

  QSettings类允许您以用户友好和跨平台的方式保存和访问应用程序的设置。它提供了一种简单的方式来读取和写入设置值,并且支持不同平台上的不同存储位置,如注册表、配置文件和INI文件。此外,QSettings还提供了一些高级特性,如监听设置的变化、使用默认值等,以满足各种设置管理需求。通过使用QSettings,我们可以轻松地访问和修改应用程序的设置,而不需要处理低级的I/O操作。


一、概述

1.1 QSetting是什么

QSetting是Qt框架中的一个类,用于管理和存储应用程序的设置。它可以方便地读取和写入应用程序的配置值,包括字符串、整数、浮点数、布尔值和QVariant类型等。QSetting支持将配置值存储在操作系统的注册表中(Windows系统)或INI文件中(其他操作系统),也可以使用自定义格式进行存储。应用程序可以使用QSetting类来保持用户首选项、应用程序状态和其他需要持久化的数据。

1.2 为什么学习QSetting是重要的

学习QSetting是重要的,因为它可以帮助开发者管理和存储应用程序的设置,包括用户首选项、应用程序状态和其他需要持久化的数据。以下是学习QSetting的重要原因:

  • 简单易用: QSetting提供了简单易用的API,使开发者能够方便地读取和写入设置值,无论是保存在注册表、INI文件还是其他自定义格式中。

  • 跨平台性: QSetting在不同平台(Windows、Linux、Mac等)上都有良好的支持。它能够自动选择合适的存储位置和格式,使开发者无需关心底层细节。

  • 持久化数据: QSetting可以帮助开发者将数据持久化保存,使得应用程序在重新启动后能够恢复到上次的状态或用户设置。

  • 用户首选项: 通过QSetting,开发者可以轻松管理和存储用户的首选项,如语言、主题、字体设置等。这样,用户在下一次打开应用程序时,可以自动恢复他们的首选项。

  • 数据共享: 通过QSetting,开发者可以将数据存储在共享位置,使不同的应用程序之间可以访问和共享这些数据,提供更好的用户体验和一致性。

二、不同存储位置的优缺点

不同存储位置的优缺点如下:

  1. 注册表:

    • 优点:
      • 注册表是Windows操作系统的一部分,可用于存储应用程序的设置值。
      • 注册表的访问速度较快,可以在系统级别共享设置值。
    • 缺点:
      • 注册表是操作系统的核心部分,需要管理员权限才能访问和更改。
      • 注册表的结构复杂,不方便直接编辑。
  2. 配置文件:

    • 优点:
      • 配置文件通常是文本文件,易于编辑和维护。
      • 配置文件可以存储在应用程序的安装目录中,使其易于分发和更新。
    • 缺点:
      • 配置文件可能需要手动创建和维护。
      • 配置文件通常是明文存储,可能存在安全风险。
  3. INI文件:

    • 优点:
      • INI文件是简单且通用的配置文件格式,易于使用和理解。
      • INI文件可以按部分和键值对的结构存储设置值。
    • 缺点:
      • INI文件不支持嵌套结构和复杂的数据类型。
      • INI文件在处理大量设置值时性能可能较低。

三、 QSetting的高级用法

QSettings提供了一些高级特性,使设置值的使用更加灵活和方便。以下是一些常用的高级特性:

  1. 监听设置的变化:可以使用QSettings的valueChanged信号来监听设置值的变化。当设置值发生变化时,会触发该信号,可以在相应的槽函数中处理变化。
QObject::connect(&settings, &QSettings::valueChanged, [](const QString& key, const QVariant& value) {
    qDebug() << "Setting" << key << "changed to" << value.toString();
});
  1. 使用默认值:可以通过value方法的第二个参数设置默认值。当读取的设置值不存在时,将返回设置的默认值。
QString username = settings.value("username", "defaultUsername").toString();
  1. 设置默认值:可以使用setDefault方法来设置默认值,该默认值将在读取设置值时使用。
settings.setDefault("username", "defaultUsername");
  1. 删除设置值:可以使用remove方法来删除指定的设置值。
settings.remove("username");
  1. 清除所有设置值:可以使用clear方法来清除所有的设置值。
settings.clear();
  1. 同步设置值:默认情况下,QSettings会在每次设置值时自动同步到底层存储位置。但是,可以通过sync方法来强制手动同步设置值。
settings.sync();

四、实例演示

示例1:

    QSettings settings("参数.ini",QSettings::IniFormat);
    settings.setIniCodec(QTextCodec::codecForName("utf-8"));

    //!写
    //![0]
    settings.setValue("register/acount"  ,"夯大力" );
    settings.setValue("register/password","123456");

    //![1]
    settings.beginGroup("register");
    settings.setValue("acount"  ,"夯大力");
    settings.setValue("password","12345");
    settings.endGroup();

    //![2]
    settings.beginWriteArray("register");
    for(int i = 0;i < 3;i++)
    {
        settings.setArrayIndex(i);
        settings.setValue("acount"  ,"夯大力");
        settings.setValue("password","12345");
    }
    settings.endArray();


    settings.sync();

    //!读
    //![0]
    qDebug().noquote() << settings.value("register/acount").toString() << "|"\
                       << settings.value("register/password").toString();
    qDebug().noquote() << settings.value("register/acount").toString() << "|"\
                       << settings.value("register/password").toString();
    //![1]
    QStringList list = settings.allKeys();
    for(int i = 0;i < list.size();i++)
    {
        qDebug() << "key:" << list.at(i) << "|" << "value:" \
                 << settings.value(list.at(i)).toString();
    }

运行结果:
在这里插入图片描述
在这里插入图片描述

注意:

  • QSettings在写float类型时要将float强制转化为double类型,写入文件才能正常显示。
  • 中文字符键值在保存的文档中不能正常显示

总结

QSetting是一个用于存储和管理应用程序设置的类。它提供了一种方便的方式来存储和获取应用程序的配置信息。

QSetting的主要概念包括:

  1. 键-值对:QSetting使用键-值对的形式来存储数据。每个设置项都有一个唯一的键和一个与之关联的值。
  2. 组:QSetting允许将设置项分组,以便更好地组织和管理设置。每个组都有一个唯一的名称。
  3. 作用域:QSetting支持全局和本地两种作用域。全局作用域的设置项在整个系统范围内有效,而本地作用域的设置项只在当前应用程序中有效。
  4. 默认值:QSetting允许为设置项设置默认值。当没有为设置项指定值时,将使用默认值。

QSetting的用法主要包括:

  1. 创建QSetting实例:可以通过指定作用域和组名称来创建一个QSetting实例。
  2. 存储设置项:可以使用setValue()方法将设置项的值存储在QSetting中。可以指定键和值,以及可选的组和作用域。
  3. 获取设置项:可以使用value()方法从QSetting中获取设置项的值。可以指定键、默认值和可选的组和作用域。
  4. 删除设置项:可以使用remove()方法从QSetting中删除设置项。
  5. 检查设置项是否存在:可以使用contains()方法来检查给定键的设置项是否存在。
  6. 获取所有设置项:可以使用allKeys()方法获取所有设置项的键。

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

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

相关文章

HCIP——VRRP的实验配置

一、VRRP的理论知识 1.1VRRP&#xff08;虚拟路由冗余协议&#xff09;的概述&#xff1a; 通过把几台路由设别联合组成一台虚拟的路由设备&#xff0c;既能够实现网关的备份&#xff0c;又能解决多个网关之间互相冲突的问题。 1.2VRRP状态机&#xff1a; VRRP协议状态机有…

从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅

上一篇&#xff1a;《再用RNN神经网络架构设计生成式语言模型》 序言&#xff1a;本文探讨了如何通过多种方法改进模型的输出&#xff0c;包括扩展数据集、调整模型架构、优化训练数据的窗口设置&#xff0c;以及采用字符级编码。这些方法旨在提高生成文本的准确性和合理性&am…

Mysql | 尚硅谷 | 第02章_MySQL环境搭建

Mysql笔记&#xff1a;第02章_MySQL环境搭建 说明&#xff1a;本内容整理自尚硅谷B站MySQL视频>>尚硅谷B站MySQL视频 文章目录 Mysql笔记&#xff1a;第02章_MySQL环境搭建第02章_MySQL环境搭建 1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;[软件](h…

unity 让文字呈现弧度变化

效果&#xff1a; using UnityEngine; using TMPro; using Core;[ExecuteInEditMode] public class TMTextWrap : MonoBehaviour {private TMP_Text m_TextComponent;public AnimationCurve VertexCurve new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new …

java抽奖系统(一)2.0

1. 项⽬介绍 1.1 背景 随着数字营销的兴起&#xff0c;企业越来越重视通过在线活动来吸引和留住客⼾。抽奖活动作为⼀种有效的营 销⼿段&#xff0c;能够显著提升⽤⼾参与度和品牌曝光率。于是我们就开发了以抽奖活动作为背景的Spring Boot项⽬&#xff0c;通过这个项⽬提供⼀…

【5G】Spectrum 频谱

频谱是移动运营商的关键资产&#xff0c;可用的频谱是定义移动网络容量和覆盖范围的重要因素。本章讨论了5G的不同频谱选项、它们的特性以及5G早期部署阶段的预期频谱。5G是首个旨在利用大约400 MHz到90 GHz之间所有频段的移动无线系统。5G还设计用于在许可、共享和非许可频谱带…

复现论文:PromptTA: Prompt-driven Text Adapter for Source-freeDomain Generalization

github&#xff1a;zhanghr2001/PromptTA: Source-free Domain Generalization 论文&#xff1a;[2409.14163] PromptTA: Prompt-driven Text Adapter for Source-free Domain Generalization 自己标注&#xff1a;PromptTA: Prompt-driven Text Adapter for Source-free Domai…

电子应用设计方案-43:智能手机充电器系统方案设计

智能手机充电器系统方案设计 一、引言 随着智能手机的广泛应用&#xff0c;对充电器的性能、效率和安全性提出了更高的要求。本方案旨在设计一款高效、安全、兼容多种快充协议的智能手机充电器。 二、系统概述 1. 系统目标 - 提供快速、稳定、安全的充电功能。 - 兼容主流的智…

基于springboot+vue实现的项目评审系统 (源码+L文+ppt)4-116

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了项目评审系统的标准化、制度化、程序化的管理&#xff0c;有效地防止了项目评审的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确…

深入了解架构中常见的4种缓存模式及其实现

4种缓存模式 随着应用程序的复杂性日益增加&#xff0c;缓存管理变得至关重要。缓存不仅能有效减轻数据库负载&#xff0c;还能显著提升数据访问速度。选择合适的缓存模式能够在不同的业务场景下发挥出最佳效果。 本文将详细介绍四种常见的缓存模式&#xff1a;Cache-Aside (…

【论文阅读】处理器芯片敏捷设计方法:问题与挑战

作者&#xff1a;包云岗老师 包云岗老师是计算机体系结构方向的大牛&#xff0c;推动了体系结构方面的开源事业! 欢迎对本栏目感兴趣的人学习"一生一芯"~ 学习体会&#xff1a; 已有的软硬件生态系统和开发成本制约了对新结构的探索。但目前仍在几种路线上做尝试~ 1…

Android记单词app(包含数据库)

一、功能与要求 实现功能:设计与开发记单词系统的,系统功能包括用户登录、用户注册、单词操作(单词的添加、查询、修改及删除)以及忘记密码等。 指标要求:通过用户登录、用户注册、单词操作、忘记密等功能的设计与开发,掌握Android常用布局、控件的使用、监听器的设置以及…

数据结构与算法学习笔记----树与图的深度优先遍历

数据结构与算法学习笔记----树与图的深度优先遍历 author: 明月清了个风 first publish time: 2024.12.9 pa⭐️这里只有一道题哈哈。 Acwing 846.树的重心 给定一棵树&#xff0c;树中包含 n n n个节点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;和 n − 1 n - 1 n…

TSWIKI知识库软件

TSWIKI 知识库软件介绍 推荐一个适合本地化部署、自托管的知识库软件 TSWIKI介绍 tswiki 是一个适合小团队、个人的知识库、资料管理的软件&#xff0c;所有数据均本地化存储。可以本地化、私有云部署&#xff0c;安装简单。在线预览。 主要功能说明 1、简化的软件依赖和安…

mid360使用cartorapher进行3d建图导航

1. 添加urdf配置文件&#xff1a; 添加IMU配置关节点和laser关节点 <!-- imu livox --> <joint name"livox_frame_joint" type"fixed"> <parent link"base_link" /> <child link"livox_frame" /> <o…

第四十六篇 Vision Transformer论文翻译

论文连接:https://arxiv.org/abs/2010.11929 GitHub:https://github.com/google-research/vision_transformer 摘要 虽然Transformer架构已成为自然语言处理任务的实际标准,但其在计算机视觉中的应用仍然有限。在计算机视觉中,注意力机制要么与卷积网络结合使用,要么在保…

【VUE2】纯前端播放海康视频录像回放,视频格式为rtsp格式,插件使用海康视频插件

一、需求 1、后端从海康平台拉流视频回放数据&#xff0c;前端进行页面渲染播放&#xff0c;视频格式为rtsp eg&#xff1a; 基本格式&#xff1a;rtsp://<username>:<password><ip_addr>:<port>/<path>参数说明&#xff1a; username&#xff…

STL库中list的使用与迭代器的实现

STL库中list的使用与迭代器的实现 1.使用list中的部分函数assignspliceremoveuniquemeger 2.list的部分功能实现&#xff08;重点&#xff09;框架迭代器的实现 1.使用list中的部分函数 assign 功能一&#xff1a;当前链表的节点全部销毁&#xff0c;替换成迭代区间的值 功能二…

2024年华中杯数学建模C题基于光纤传感器的平面曲线重建算法建模解题全过程文档及程序

2024年华中杯数学建模 C题 基于光纤传感器的平面曲线重建算法建模 原题再现 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其基本原理是当外界环境参数发生变化时&#xff0c…

ETCD的封装和测试

etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景&#xff1a; 当主机A给服务器存储 name&#xff1a; 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用&#xff1a;服务注册与发…