详解Qt QSettings 设置类

ops/2024/11/25 14:53:26/
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="markdown_views prism-atom-one-dark">cap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

class="toc">

文章目录

  • QSettings 详解
    • 前言
    • 什么是 QSettings?
    • QSettings 的构造函数和常用成员函数
      • 构造函数
        • 1. 默认构造函数
        • 2. 指定组织和应用名称
        • 3. 使用自定义文件
    • 常用成员函数
      • 1. 写入设置
        • `setValue`
      • 2. 读取设置
        • `value`
      • 3. 检查键是否存在
        • `contains`
      • 4. 删除设置
        • `remove`
      • 5. 获取所有键
        • `allKeys`
      • 6. 同步数据
        • `sync`
    • 完整示例代码
    • 总结


QSettings 详解

前言

在开发应用程序时࿰c;保存用户偏好设置、配置参数或其他小型持久化数据是一个常见需求。例如࿰c;记住窗口大小、用户登录状态或程序的语言选项。Qt 提供了 <code>QSettingscode> 类࿰c;可以方便地存储和读取这些配置信息。

<code>QSettingscode> 是一个跨平台的解决方案࿰c;支持多种存储方式࿰c;如注册表(Windows)或文件(INI 文件或类似格式)࿰c;并且可以处理分层结构的键值对。通过 <code>QSettingscode>࿰c;开发者无需关心平台差异即可轻松实现配置管理。


什么是 QSettings?

<code>QSettingscode> 是 Qt 的一个类࿰c;专门用于存储和读取持久化的键值对数据。其主要特点包括:

  1. 跨平台支持:在 Windows 上默认使用注册表存储࿰c;在 Unix 系统上使用文本文件。
  2. 层次化结构:支持分层的键值对存储࿰c;类似 JSON 树结构。
  3. 方便快捷:提供简单的接口࿰c;无需手动解析或管理配置文件格式。

典型应用场景包括:

  • 保存用户偏好(如主题、语言、窗口位置等)。
  • 存储小型的应用程序配置。

QSettings 的构造函数和常用成员函数

构造函数

1. 默认构造函数
  • 函数原型

    <code class="prism language-cpp">class="token function">QSettingsclass="token punctuation">(QObject class="token operator">*parent class="token operator">= class="token keyword">nullptrclass="token punctuation">)class="token punctuation">;
    code>
  • 作用
    使用默认位置和格式创建一个 <code>QSettingscode> 对象。

  • 示例代码

    <code class="prism language-cpp">QSettings settingsclass="token punctuation">;
    code>
2. 指定组织和应用名称
  • 函数原型

    <code class="prism language-cpp">class="token function">QSettingsclass="token punctuation">(class="token keyword">const QString class="token operator">&organizationclass="token punctuation">, class="token keyword">const QString class="token operator">&applicationclass="token punctuation">, QObject class="token operator">*parent class="token operator">= class="token keyword">nullptrclass="token punctuation">)class="token punctuation">;
    code>
  • 作用
    指定组织名称和应用名称࿰c;用于确定配置文件的存储路径和命名规则。

  • 参数

    • <code>organizationcode>:组织名称࿰c;通常是公司名称。
    • <code>applicationcode>:应用名称。
  • 示例代码

    <code class="prism language-cpp">QSettings class="token function">settingsclass="token punctuation">(class="token string">"MyCompany"class="token punctuation">, class="token string">"MyApp"class="token punctuation">)class="token punctuation">;
    code>
3. 使用自定义文件
  • 函数原型

    <code class="prism language-cpp">class="token function">QSettingsclass="token punctuation">(class="token keyword">const QString class="token operator">&fileNameclass="token punctuation">, Format formatclass="token punctuation">, QObject class="token operator">*parent class="token operator">= class="token keyword">nullptrclass="token punctuation">)class="token punctuation">;
    code>
  • 作用
    使用指定文件和格式存储配置。

  • 参数

    • <code>fileNamecode>:配置文件路径。
    • <code>formatcode>:文件格式࿰c;可以是 <code>QSettings::IniFormatcode> 或 <code>QSettings::NativeFormatcode>。
  • 示例代码

    <code class="prism language-cpp">QSettings class="token function">settingsclass="token punctuation">(class="token string">"/path/to/config.ini"class="token punctuation">, QSettingsclass="token operator">::IniFormatclass="token punctuation">)class="token punctuation">;
    code>

常用成员函数

1. 写入设置

<code>setValuecode>
  • 函数原型

    <code class="prism language-cpp">class="token keyword">void class="token function">setValueclass="token punctuation">(class="token keyword">const QString class="token operator">&keyclass="token punctuation">, class="token keyword">const QVariant class="token operator">&valueclass="token punctuation">)class="token punctuation">;
    code>
  • 作用
    向配置文件写入一个键值对。

  • 参数

    • <code>keycode>:键名࿰c;支持分层结构(如 <code>"Window/Size"code>)。
    • <code>valuecode>:值࿰c;可以是基本类型或复杂类型(如 <code>QVariantcode> 支持的类型)。
  • 示例代码

    <code class="prism language-cpp">QSettings class="token function">settingsclass="token punctuation">(class="token string">"MyCompany"class="token punctuation">, class="token string">"MyApp"class="token punctuation">)class="token punctuation">;
    settingsclass="token punctuation">.class="token function">setValueclass="token punctuation">(class="token string">"Window/Size"class="token punctuation">, class="token function">QSizeclass="token punctuation">(class="token number">800class="token punctuation">, class="token number">600class="token punctuation">)class="token punctuation">)class="token punctuation">;
    settingsclass="token punctuation">.class="token function">setValueclass="token punctuation">(class="token string">"User/Name"class="token punctuation">, class="token string">"JohnDoe"class="token punctuation">)class="token punctuation">;
    code>

2. 读取设置

<code>valuecode>
  • 函数原型

    <code class="prism language-cpp">QVariant class="token function">valueclass="token punctuation">(class="token keyword">const QString class="token operator">&keyclass="token punctuation">, class="token keyword">const QVariant class="token operator">&defaultValue class="token operator">= class="token function">QVariantclass="token punctuation">(class="token punctuation">)class="token punctuation">) class="token keyword">constclass="token punctuation">;
    code>
  • 作用
    根据键名读取配置值࿰c;如果键不存在则返回默认值。

  • 参数

    • <code>keycode>:要读取的键名。
    • <code>defaultValuecode>:如果键不存在时返回的值࿰c;默认为空。
  • 返回值
    返回一个 <code>QVariantcode>࿰c;包含配置值。

  • 示例代码

    <code class="prism language-cpp">QVariant size class="token operator">= settingsclass="token punctuation">.class="token function">valueclass="token punctuation">(class="token string">"Window/Size"class="token punctuation">, class="token function">QSizeclass="token punctuation">(class="token number">640class="token punctuation">, class="token number">480class="token punctuation">)class="token punctuation">)class="token punctuation">;
    class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"Window size:" class="token operator"><< sizeclass="token punctuation">.class="token function">toSizeclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    code>

3. 检查键是否存在

contains_139"><code>containscode>
  • 函数原型

    <code class="prism language-cpp">class="token keyword">bool class="token function">containsclass="token punctuation">(class="token keyword">const QString class="token operator">&keyclass="token punctuation">) class="token keyword">constclass="token punctuation">;
    code>
  • 作用
    检查指定键是否存在。

  • 返回值
    如果键存在࿰c;返回 <code>truecode>;否则返回 <code>falsecode>。

  • 示例代码

    <code class="prism language-cpp">class="token keyword">if class="token punctuation">(settingsclass="token punctuation">.class="token function">containsclass="token punctuation">(class="token string">"User/Name"class="token punctuation">)class="token punctuation">) class="token punctuation">{class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"Username exists!"class="token punctuation">;
    class="token punctuation">}
    code>

4. 删除设置

<code>removecode>
  • 函数原型

    <code class="prism language-cpp">class="token keyword">void class="token function">removeclass="token punctuation">(class="token keyword">const QString class="token operator">&keyclass="token punctuation">)class="token punctuation">;
    code>
  • 作用
    删除指定键及其所有子键。

  • 示例代码

    <code class="prism language-cpp">settingsclass="token punctuation">.class="token function">removeclass="token punctuation">(class="token string">"User/Name"class="token punctuation">)class="token punctuation">;
    class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"Username removed!"class="token punctuation">;
    code>

5. 获取所有键

<code>allKeyscode>
  • 函数原型

    <code class="prism language-cpp">QStringList class="token function">allKeysclass="token punctuation">(class="token punctuation">) class="token keyword">constclass="token punctuation">;
    code>
  • 作用
    返回配置中所有的键名。

  • 示例代码

    <code class="prism language-cpp">QStringList keys class="token operator">= settingsclass="token punctuation">.class="token function">allKeysclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">for class="token punctuation">(class="token keyword">const QString class="token operator">&key class="token operator">: keysclass="token punctuation">) class="token punctuation">{class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< keyclass="token punctuation">;
    class="token punctuation">}
    code>

6. 同步数据

c_202"><code>synccode>
  • 函数原型

    <code class="prism language-cpp">class="token keyword">void class="token function">syncclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    code>
  • 作用
    将内存中的更改强制写入存储介质。

  • 示例代码

    <code class="prism language-cpp">settingsclass="token punctuation">.class="token function">setValueclass="token punctuation">(class="token string">"New/Key"class="token punctuation">, class="token number">123class="token punctuation">)class="token punctuation">;
    settingsclass="token punctuation">.class="token function">syncclass="token punctuation">(class="token punctuation">)class="token punctuation">;  class="token comment">// 确保数据立即写入
    code>

完整示例代码

以下示例展示了如何使用 <code>QSettingscode> 保存和读取用户配置:

<code class="prism language-cpp">class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><QCoreApplication>
class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><QSettings>
class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><QDebug>
class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><QSize>class="token keyword">int class="token function">mainclass="token punctuation">(class="token keyword">int argcclass="token punctuation">, class="token keyword">char class="token operator">*argvclass="token punctuation">[class="token punctuation">]class="token punctuation">) class="token punctuation">{QCoreApplication class="token function">appclass="token punctuation">(argcclass="token punctuation">, argvclass="token punctuation">)class="token punctuation">;class="token comment">// 创建 QSettings 对象QSettings class="token function">settingsclass="token punctuation">(class="token string">"MyCompany"class="token punctuation">, class="token string">"MyApp"class="token punctuation">)class="token punctuation">;class="token comment">// 写入设置settingsclass="token punctuation">.class="token function">setValueclass="token punctuation">(class="token string">"Window/Size"class="token punctuation">, class="token function">QSizeclass="token punctuation">(class="token number">800class="token punctuation">, class="token number">600class="token punctuation">)class="token punctuation">)class="token punctuation">;settingsclass="token punctuation">.class="token function">setValueclass="token punctuation">(class="token string">"User/Name"class="token punctuation">, class="token string">"JohnDoe"class="token punctuation">)class="token punctuation">;class="token comment">// 读取设置QSize windowSize class="token operator">= settingsclass="token punctuation">.class="token function">valueclass="token punctuation">(class="token string">"Window/Size"class="token punctuation">, class="token function">QSizeclass="token punctuation">(class="token number">640class="token punctuation">, class="token number">480class="token punctuation">)class="token punctuation">)class="token punctuation">.class="token function">toSizeclass="token punctuation">(class="token punctuation">)class="token punctuation">;QString userName class="token operator">= settingsclass="token punctuation">.class="token function">valueclass="token punctuation">(class="token string">"User/Name"class="token punctuation">, class="token string">"Unknown"class="token punctuation">)class="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">;class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"Window size:" class="token operator"><< windowSizeclass="token punctuation">;class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"User name:" class="token operator"><< userNameclass="token punctuation">;class="token comment">// 检查键是否存在class="token keyword">if class="token punctuation">(settingsclass="token punctuation">.class="token function">containsclass="token punctuation">(class="token string">"User/Name"class="token punctuation">)class="token punctuation">) class="token punctuation">{class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">"Username exists!"class="token punctuation">;class="token punctuation">}class="token comment">// 删除键settingsclass="token punctuation">.class="token function">removeclass="token punctuation">(class="token string">"User/Name"class="token punctuation">)class="token punctuation">;class="token comment">// 列出所有键QStringList keys class="token operator">= settingsclass="token punctuation">.class="token function">allKeysclass="token punctuation">(class="token punctuation">)class="token punctuation">;class="token keyword">for class="token punctuation">(class="token keyword">const QString class="token operator">&key class="token operator">: keysclass="token punctuation">) class="token punctuation">{class="token function">qDebugclass="token punctuation">(class="token punctuation">) class="token operator"><< keyclass="token punctuation">;class="token punctuation">}class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}
code>

总结

<code>QSettingscode> 是一个强大、灵活且简单易用的配置管理工具࿰c;它为应用程序的配置持久化提供了跨平台的解决方案。无论是保存窗口大小、用户偏好࿰c;还是管理复杂的键值对结构࿰c;<code>QSettingscode> 都能很好地满足需求。

通过合理地组织和使用 <code>QSettingscode> 的键值结构࿰c;可以大大简化配置的存取逻辑࿰c;从而提升程序的易维护性和用户体验。

class="blog-extension-box">

http://www.ppmy.cn/ops/136599.html

相关文章

20241121 android中树结构列表(使用recyclerView实现)

1、adapter-item的布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"wrap_content&…

【Spring】RESTful设计风格

前言 REST(Representational State Transfer),即“表现层状态转移”,它定义了互联网软件服务的架构原则。如果一个架构的符合 REST 原则&#xff0c;就被称之为 RESTful 架构&#xff0c;这是目前最流行的互联网软件服务架构设计风格之一。 REST 并不是一种标准&#xff0c;…

深度学习中的循环神经网络(RNN)与时间序列预测

一、循环神经网络&#xff08;RNN&#xff09;简介 循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;简称RNN&#xff09;是一种专门用于处理序列数据的神经网络架构。与传统神经网络不同&#xff0c;RNN具有内部记忆能力&#xff0c;能够捕捉数据中的时间依赖…

(免费送源码)计算机毕业设计原创定制:Java+SSM+JSP+Ajax+MySQLSSM国外鞋服代购平台

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;鞋服代购平台当然也不例外。代购平台是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用…

深度学习1

一、库的安装 1、cuda/cpu cuda 有最好&#xff0c;没有无需额外安装&#xff1b;cpu无需其他操作&#xff0c;直接进入下面步骤 查看 nvidia 驱动版本&#xff1a;cmd里面&#xff0c;输入nvidia-smi 查看GPU驱动程序版本 CUDA Version位置&#xff08;保证CUDA版本号<GPU…

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…

ApiChain 从迭代测试用例到项目回归测试 核心使用教程

项目地址&#xff1a;ApiChain 项目主页 环境变量 环境变量是在特定的开发环境&#xff08;开发、测试、uat等&#xff09;下&#xff0c;保存的一份数据集&#xff0c;环境变量是发送网络请求或者执行单测的一个重要数据源。环境变量根据作用范围可以分为全局环境变量、项目…

OAuth2资源服务器白名单接口带token被拦截

在资源服务器的配置中&#xff0c;添加了请求白名单&#xff0c;如下 Configuration EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter {Autowiredprivate OAuth2Properties properties;Overridepublic void configure(HttpSe…