QSettings使用笔记

QSettings 使用详解 QSettings 类是 Qt 框架中的一个重要类,用于存储和访问应用程序的设置和配置。它提供了一种简单的方法来读取和写入应用程序的配置数据,支持多种存储格式,包括 Windows 注册表、INI 文件和 XML 文件等。 阅读详情

一、代码之路

日常中,我们会使用QSettings来读取配置文件中的数据信息或者是注册表中的键值对信息,如下方代码:

QString strFilePath = "D:/my.ini";
QSettings sysSettings(strFilePath, QSettings::IniFormat);
sysSettings.setIniCodec("UTF-8");
sysSettings.beginGroup("MyInfo");
strHost = sysSettings.value("Name").toString();
strPort = sysSettings.value("Age").toString();
sysSettings.endGroup();

但是如果我们只是QSettings对象来存储数据,如下方代码中getMyInfo方法将自己的数据信息存储在QSettings对象中,但是我们发现在test方法中我们使用qDebug打印出来的名字和年龄都是空值。

Name: “” Age: 0

QSettings* getMyInfo(QString name, int age)
{
    QSettings* settings = new QSettings();
    settings->setValue("Name", name);
    settings->setValue("Age", age);
    
     return settings;
}

void testSettings()
{
    QSettings* mySettings = getMyInfo("小明", 18);

    QString name = mySettings->value("Name").toString();
    int age = mySettings->value("Age").toInt();
    qDebug() << "Name:" << name << " Age:" << age;
}

那么原因出在哪里呢?
简单看下Qt助手中这段解释说明:

QSettings objects can be created either on the stack or on the heap (i.e. using new). Constructing and destroying a QSettings object is very fast.
If you use QSettings from many places in your application, you might want to specify the organization name and the application name using QCoreApplication::setOrganizationName() and QCoreApplication::setApplicationName(), and then use the default QSettings constructor:

QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;

如果我们需要使用QSettings的默认构造函数,需要调用下面的代码,设置全局的OrganizationName:

QCoreApplication::setOrganizationName("MySoft");
QSettings* settings = new QSettings("MySoft");

注意点:

如果没有全局设置OrganizationName,我们可以在QSettings构造方法中传入OrganizationName,下面代码中我们稍加修改,在getMyInfo方法中我们直接在栈上创建QSettings对象(即局部变量,会在函数结束后销毁),然后我们在testSettings方法中直接在QSettings对象中传入相同的OrganizationName,然后依旧可以输出我们传入的值,说明可以直接通过指定OrganizationName来创建一个全局的QSettings数据对象。

void getMyInfo(QString name, int age)
{
    QSettings settings("MySoft");
    settings.setValue("Name", name);
    settings.setValue("Age", age);
}

void testSettings()
{
    // 这里直接调用;
    getMyInfo("小明", 18);
    // 这里也是在构造中指定getMyInfo方法中同样的OrganizationName;
    QSettings mySettings("MySoft");

    QString name = mySettings.value("Name").toString();
    int age = mySettings.value("Age").toInt();
    qDebug() << "Name:" << name << " Age:" << age;
}

那我们是不是可以通过指定不同的OrganizationName,来创建多个全局的QSettings数据对象呢,来看下方测试代码:

void testSettings()
{
    // 测试数据
    {
        QSettings settings("MySoft1");
        settings.setValue("Name", "小明");
        settings.setValue("Age", 18);
        
        QSettings settings1("MySoft2");
        settings1.setValue("Name", "小李");
        settings1.setValue("Age", 20);  
    }
    
    
    {
        QSettings mySettings1("MySoft1");
        QString name = mySettings1.value("Name").toString();
        int age = mySettings1.value("Age").toInt();
        qDebug() << "Name:" << name << " Age:" << age;
    }
    
    {
        QSettings mySettings2("MySoft2");
        QString name = mySettings2.value("Name").toString();
        int age = mySettings2.value("Age").toInt();
        qDebug() << "Name:" << name << " Age:" << age;
    }
}

输出结果:

Name: “小明” Age: 18
Name: “小李” Age: 20

通过测试,证明了我们的猜想。

其实这里除了OrganizationName之外,还有另外一个参数ApplicationName可以设置,请看下方测试代码:

void testSettings()
{
    {
        QSettings settings("MySoft", "Test1");
        settings.setValue("Name", "小明");
        settings.setValue("Age", 18);

        QSettings settings1("MySoft", "Test2");
        settings1.setValue("Name", "小李");
        settings1.setValue("Age", 20);
    }
    


    {
        QSettings mySettings1("MySoft", "Test1");
        QString name = mySettings1.value("Name").toString();
        int age = mySettings1.value("Age").toInt();
        qDebug() << "Name:" << name << " Age:" << age;
    }

    {
        QSettings mySettings2("MySoft", "Test2");
        QString name = mySettings2.value("Name").toString();
        int age = mySettings2.value("Age").toInt();
        qDebug() << "Name:" << name << " Age:" << age;
    }

    {
        // 这里特意增加了ApplicationName为Test3,实际未设置过ApplicationName为Test3
        QSettings mySettings3("MySoft", "Test3");
        QString name = mySettings3.value("Name").toString();
        int age = mySettings3.value("Age").toInt();
        qDebug() << "Name:" << name << " Age:" << age;
    }
}

实际输出:

Name: “小明” Age: 18
Name: “小李” Age: 20
Name: “小明” Age: 18

从测试结果中看到,可以通过OrganizationName和ApplicationName组合进行使用,获取到不同的QSettings配置信息;
同时我特意增加了一组QSettings mySettings3(“MySoft”, “Test3”);测试数据,这里并未设置ApplicationName为Test3对应的数据,这里可以从源码中来寻找更加准确的答案,这里我们通过测试数据来得出的信息,源码的逻辑才是更加正确的。

Qt开发:QSettings的介绍和使用 QSettings 是 Qt 提供的一个类,用于在应用程序中持久化存储配置数据。它的目的是简化存储和读取配置项,比如用户设置、程序的默认参数或其他配置信息。QSettings 能够将这些配置项存储在文件系统或平台特定的存储位置中,例如 INI 文件、注册表或 等。 阅读详情

相关推荐

PyQt学习笔记-使用QSettings保存系统配置参数

QSettings继承于QObject,位于PyQt6.QtCore模块中。QSettings的API基于QVariant,允许您以最小的工作量保存大多数基于值的类型,例如QString,QRect和QImage。可通过配置将应用程序需要保存的参数数据保存到本地,如windows的注册表,macOS 和 iOS 上的属性列表文件,linux的ini文本文件等。

向往的是:佛祖堂前的鱼,静静听禅。 3016

QSettings

一、描述 用户通常希望应用程序能够记住其跨会话的设置(窗口大小和位置、选项等)。 此信息通常存储在 Windows 上的系统注册表中,以及 macOS 和 iOS 上的属性列表文件中。在 Unix 系统上,由于没有标准,许多应用程序使用 INI 文本文件。 QSettings 是对这些技术的抽象,使用户能够以可移植的方式保存和恢复应用程序设置。它还支持自定义存储格式。 QSettings 的 API 是基于 QVariant 的,可以让用户便捷地保存大多数基于值的类型,例如 QString、QRect

友善啊,朋友的博客 1万+

告别兼容性困扰:在F-Droid中安全部署Termux的完整指南

本文提供了一份在F-Droid中安全部署Termux的完整指南,旨在彻底解决Android设备上的兼容性困扰。文章详细阐述了为何选择F-Droid而非Google Play商店,并逐步指导用户完成从彻底清理旧版本、安装F-Droid客户端、授予权限到最终安装配置Termux的全过程。指南还涵盖了进阶的稳定性配置、数据迁移方法以及常见问题排查,确保用户获得一个稳定、无冲突的命令行工作环境。

weixin_29224309的博客 944

QSettings 类

一 、QSettings介绍: 用户通常希望应用程序记住其设置。在windows中,这些设置保存在注册表中,ios在属性文件列表中,而unix,在缺乏标准的情况下,其存储在ini文本中。QSettings有两种存储格式:QSettings::NativeFormat(在windows平台可读写注册表)、QSettings::IniFormat(读写ini文件)、QSettings::Inva...

weixin_30871905的博客 1977

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6562

QT学习笔记3---QSettings

引:本文为QT开发的第三篇学习笔记;更多的基础内容与开发必备知识,请参考友情链接:[QT学习笔记2---事件](https://blog.youkuaiyun.com/qq_41684737/article/details/144022128)

qq_41684737的博客 1266

Matlab+Matpower实战:手把手教你生成IEEE14节点FDIA攻击数据集(附完整代码)

本文提供了一份基于Matlab与Matpower工具构建IEEE14节点FDIA攻击数据集的完整实战指南。通过动态负荷数据模拟、潮流计算、状态估计及隐蔽攻击向量注入,手把手教你生成可用于电力系统网络安全研究的仿真数据集,并附有核心代码与调试技巧。

bean的博客 397

QSettings + INI 笔记

本文介绍了使用QSettings操作INI配置文件的方法。主要内容包括:1) 初始化QSettings对象;2) 基础读写操作,通过setValue()写入和value()读取;3) 实用技巧如分组管理、数组存储和配置路径选择;4) 示例展示单例模式封装配置;5) 常用操作如键检查、删除等;6) 注意事项如路径分隔符和编码处理。核心要点是使用QSettings的简单API实现跨平台INI配置管理,适合保存应用设置和用户偏好。

weixin_47564581的博客 405

YOLO26小目标检测实战:STAL标签分配+MuSGD优化,VisDrone数据集漏检率降50%

小目标检测是计算机视觉的经典难题,而VisDrone数据集小目标占比极高:数据集中小目标(像素面积<32×32)占比超过60%,且大量目标仅为几个像素,特征信息极度匮乏;背景复杂且干扰多:无人机航拍场景包含建筑物、树木、人群、车辆等复杂背景,小目标易被背景淹没;尺度变化与遮挡严重:同一目标在不同帧中尺度差异大,且小目标极易被其他目标遮挡;传统模型的固有缺陷标签分配策略(如ATSS、SimOTA)偏向大目标,小目标的正样本分配不足,导致模型对小目标不敏感;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1183

数字电路与逻辑设计实验二 组合逻辑电路

1.组合逻辑电路功能测试 (1)用 2 片 74LS00 组成图 2.1 所示逻辑电路。为便于接线和检查,在图中要注明 芯片编号及各引脚对应的编号。 (2)图中 A、B、C 接逻辑开关,Y1,Y2 接发光管电平显示。 (3)按表 2.3 要求,改变 A、B、C 输入的状态,填表并写出 Y1,Y2 的逻辑表达式。 (4)将运算结果与实验结果进行比较。 2.测试用异或门(74LS86)和与非门组成的半加器的逻辑功能。 根据半加器的逻辑表达式可知,半加 器 Y 是 A、B 的异或,而进位 Z 是 A

欢迎交流学习心得 1277

【QT笔记】QSettings 类读写配置文件

QSettings 类读取和写入配置文件(.ini)。

qq_43664796的博客 1445

基于YOLOv26的卫星遥感环境监测系统

本文介绍了一个基于YOLOv26的卫星遥感环境监测系统。该系统采用分层架构设计,包含数据采集、预处理、目标检测、图像分析、变化检测等核心模块。技术栈包括YOLOv26、PyTorch、OpenCV等深度学习框架和图像处理工具,以及GDAL、rasterio等地理信息处理库。系统支持获取多种卫星数据源(如Sentinel、Landsat、MODIS)的遥感图像,并进行时间序列分析。通过代码示例展示了数据采集模块的实现,包括卫星图像获取和模拟生成功能。该系统可应用于环境要素检测、变化监测等场景,为环境监测提供智

一键难忘的博客 934

PySide6 的 QSettings简单应用学习笔记

的类,会自动将应用的配置数据保存到系统对应位置(Windows 注册表、macOS/iOS 的 plist 文件、Linux 的配置文件),无需手动管理文件路径。QSettings 的核心价值是。如果后续修改了窗口布局(如新增 / 删除停靠窗口、工具栏),restoreState 可能会失败。(工具栏位置、停靠窗口位置 / 状态、菜单栏可见性等),返回 QByteArray 类型。(位置、大小、是否最大化 / 最小化),返回 QByteArray 类型。QSettings 是 PySide6 中用于。

xulibo5828的博客 585

手把手教你学PCIE(10.5)--PCIE故障排除方法的分步排查法介绍

通过以上分步排查法,你可以系统地诊断和解决 PCIe 设备的故障。每个步骤都有助于逐步缩小问题范围,最终找到并解决问题。

MHD0815的博客 1871

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Qt读写配置文件 QSettings类笔记

配置文件(Configuration file)一般以存在 config,ini命名。主要的结构是键值对的形式存储。节就是一组键值对的名字。配置文件的样子。Qt中读写配置文件用到的是QSettings类。这个类不止可以读配置文件,还有注册表等,详情见文档中QSettings::NativeFormat设置;构造方法公有方法。

m0_51409578的博客 874

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

QT学习笔记----QSettings读写注冊表、配置文件

简述 普通情况下。我们在开发软件过程中,都会缓存一些信息到本地,能够使用轻量级数据库sqlite。也能够操作注冊表、读写配置文件。 关于QSettings的使用前面已经介绍过了。比較具体,见“很多其它參考”,以下介绍下QSettings经常使用功能-读写注冊表、配置文件。 简述 长处 读写注冊表 一般存储 一般读取 分文件夹存储 替换applicationName 分...

m0_37624078的博客 642

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

QOwnNotes 快捷键完全指南:跨平台笔记操作效率手册

QOwnNotes 是一套基于纯文本 Markdown 的笔记与待办事项管理工具,其绝大多数高频操作(新建笔记、全文检索、加密编辑、免打扰模式、格式排版、笔记书签等)都预置了可自定义的键盘快捷键。本文以 QOwnNotes 官方快捷键参考文档为骨架,结合仓库源码 [src/mainwindow.ui](https://link.gitcode.com/i/16810b923e97c9e96f86b

gitblog_00776的博客 6

ImageGlass 快速入门:跨平台图片查看器的关键目录与验证路径

ImageGlass 是一款开源、跨平台的现代图片查看器,原生支持 90 多种格式(WEBP、GIF、SVG、AVIF、JXL、HEIC、HDR 与 RAW 等),覆盖 Windows、macOS 与 Linux。对刚接触这个仓库的读者来说,最容易踩的坑是分不清哪份代码是"现役"的。仓库里同时放着 v10 与 v9 两代实现,本文按"看懂它在做什么 → 找到该看的位置 → 跑起来验证"的顺序,帮你

gitblog_00642的博客 180

QT笔记- Windows环境下设置自定义类型文件的默认打开方式——通过QSettings类修改注册表

设置自定义类型文件的默认打开方式需要修改注册表,此处介绍在Qt环境中用代码修改注册表,这里用到了QSettings类。 示例 QString className("Myasm"); //自定义的注册表类名 QString ext(".asm"); //自定义文件的类型 QString extDes("xxxxx工程文件");

qq_43058397的博客 1826

qt 学习笔记(QSettings读写ini文件,new出来的控件的qss不继承到子控件,QVariant使用及存取各种类型,信号传递图片、自定义结构体、QVariant格式、传递类对象、传递控件)

在pyqt软件中加入了训练模型和检测功能,由于训练模型和检测比较耗时,所以放到了线程中跑。但是突然想到一个问题,怎么把线程里跑出来的检测结果图片放到主界面显示。于是乎一番搜索后,发现可以通过信号传递QVariant来实现。 下面以Qt为例, ...

qq_36780295的博客 1204

qt-- 学习笔记4.5(文件、参数文件)

2.文件存储:使用 QFile 和其他类将参数保存到文本文件、二进制文件、XMLWENJIAN、JSON 文件等。临时文件:可以使用 QTemporaryFile 来保存临时数据,这些文件在程序结束时会自动删除。内存存储:在运行时使用类成员变量或全局变量来存储数据,但这不会在程序关闭后保留数据。自定义格式:你可以创建自定义格式来保存数据,例如二进制格式或自定义文本格式。JSON 文件:使用 QJsonDocument 来序列化和反序列化数据。4.环境变量:使用系统环境变量存储参数,但这通常适合临时数据。

code_snow的博客 775

QOwnNotes 快捷键速查手册:主窗口、笔记编辑器与任务面板的完整操作指南

QOwnNotes 是一款纯文本笔记与待办事项管理器,内置 Markdown 支持与 Nextcloud / ownCloud 集成。本篇技术指南以官方快捷键文档为骨架,系统梳理 QOwnNotes 在 Linux / Windows 与 macOS 平台上的全部内置快捷键,覆盖主窗口、笔记搜索栏、笔记列表、笔记文本编辑面板、预览面板与任务列表六大操作区域,并结合仓库源码解析快捷键的存储、加载与自

gitblog_01126的博客 360

Folia:把整块屏幕变成歌词舞台的上手指南

如果你在用一个把歌词塞在屏幕角落的播放器,不妨看看 Folia:一款围绕全屏歌词动画打造的音乐播放器,屏幕本身就是舞台,歌词跟着歌曲节奏流动。网易云、酷狗、QQ 音乐、Navidrome 和本地曲库都能接,桌面端与 Web 端都有。 [![Folia 首页界面:歌曲搜索与在线音源播放入口](https://raw.gitcode.com/GitHub_Trending/fo/folia-majo

gitblog_00845的博客 411
上一篇: 如何让Windows控制台窗口不接受鼠标点击(禁用鼠标输入)
下一篇: Qt获取本机Mac地址、Ip地址
前行中的小猪
前行中的小猪 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 4万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值