QSettings 使用详解

news2025/1/13 3:19:04

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

主要功能

1. 存储设置:可以存储各种类型的数据,包括字符串、整数、布尔值等。

2. 读取设置:可以方便地读取之前存储的设置。

3. 跨平台:在不同操作系统上,QSettings 会自动选择合适的存储方式。

4. 分组管理:可以使用组(group)来组织设置,便于管理。

转载请附上文章出处与本文链接。

QSettings 使用详解目录

1 读写ini文件

1.1 读取ini文件

1.2 写ini文件

1.3 .h代码

1.4 .cpp代码

1.5 ini文件

2 读写注册表

2.1 说明

2.2 创建QSttings

2.3 读取注册表

2.4 写注册表

2.5 .h

2.6 .cpp

3 完整内容

3 .h

3.2 .cpp

4 其它文章


1 读写ini文件

1.1 读取ini文件

void QSettingsTest::readSettings(SettingInfo &Info)
{
	Info.miIndex = mSettings->value("Setting/add1", 0).toInt();
	Info.msUserName = mSettings->value("UserInfo/name", 0).toString();
	
}

1.2 写ini文件

void QSettingsTest::writeSettings(SettingInfo &Info)
{
	mSettings->setValue("Setting/add1", QString::number(Info.miIndex));
	mSettings->setValue("UserInfo/name", Info.msUserName);

}

1.3 .h代码

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QSettingsTest.h"

#include <QDebug>
#include <QSettings>



typedef struct SettingInfo
{
	int miIndex = 0;
	QString msUserName = "";
	QString msText = "";

}SettingInfo;

class QSettingsTest : public QMainWindow
{
    Q_OBJECT

public:
    QSettingsTest(QWidget *parent = nullptr);
    ~QSettingsTest();

private:
	void writeSettings(SettingInfo &Info);
	void readSettings(SettingInfo &Info);

private:
    Ui::QSettingsTestClass ui;

	QSettings *mSettings;
	QString msFilePath = "";

	SettingInfo mSettingInfo;

};



1.4 .cpp代码

#include "QSettingsTest.h"

QSettingsTest::QSettingsTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	msFilePath = QCoreApplication::applicationDirPath() + "/config.ini";
	mSettings = new QSettings(msFilePath, QSettings::IniFormat);

	writeSettings(mSettingInfo);
}

QSettingsTest::~QSettingsTest()
{}



void QSettingsTest::writeSettings(SettingInfo &Info)
{
	mSettings->setValue("Setting/add1", QString::number(Info.miIndex));
	mSettings->setValue("UserInfo/name", Info.msUserName);

}

void QSettingsTest::readSettings(SettingInfo &Info)
{
	Info.miIndex = mSettings->value("Setting/add1", 0).toInt();
	Info.msUserName = mSettings->value("UserInfo/name", 0).toString();
	
}

1.5 ini文件

config.ini

[Setting]
add1=1

[UserInfo]
name=user

2 读写注册表

2.1 说明

windows + R  打开运行
输入 regedit 打开注册表编辑
选择新建一个测试值


操作注册表注意需要管理员权限

2.2 创建QSttings

msFilePath = QCoreApplication::applicationDirPath() + "/config.ini";
mSettings = new QSettings("HKEY_USERS\\QMConfig", QSettings::NativeFormat);


QSettings::NativeFormat:表示使用本地格式(注册表)。
QSettings::UserScope:表示设置是针对当前用户的。

2.3 读取注册表

void QSettingsTest::readSettings(SettingInfo &Info)
{
	//Info.miIndex = mSettings->value("Setting/add1", 0).toInt();
	//Info.msUserName = mSettings->value("UserInfo/name", 0).toString();

	Info.miIndex = mSettings->value("Test", -1).toInt();

}

2.4 写注册表

void QSettingsTest::writeSettings(SettingInfo &Info)
{
	//mSettings->setValue("Setting/add1", QString::number(Info.miIndex));
	//mSettings->setValue("UserInfo/name", Info.msUserName);

	mSettings->setValue("Test", QString::number(Info.miIndex));

}

2.5 .h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QSettingsTest.h"

#include <QDebug>
#include <QSettings>



typedef struct SettingInfo
{
	int miIndex = 0;
	QString msUserName = "";
	QString msText = "";

}SettingInfo;

class QSettingsTest : public QMainWindow
{
    Q_OBJECT

public:
    QSettingsTest(QWidget *parent = nullptr);
    ~QSettingsTest();

private:
	void writeSettings(SettingInfo &Info);
	void readSettings(SettingInfo &Info);

private:
    Ui::QSettingsTestClass ui;

	QSettings *mSettings;
	QString msFilePath = "";

	SettingInfo mSettingInfo;

};



2.6 .cpp

#include "QSettingsTest.h"

QSettingsTest::QSettingsTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	msFilePath = QCoreApplication::applicationDirPath() + "/config.ini";
	mSettings = new QSettings("HKEY_USERS\\QMConfig", QSettings::NativeFormat);


	readSettings(mSettingInfo);

	mSettingInfo.miIndex = 100;
	writeSettings(mSettingInfo);
}

QSettingsTest::~QSettingsTest()
{}



void QSettingsTest::writeSettings(SettingInfo &Info)
{
	//mSettings->setValue("Setting/add1", QString::number(Info.miIndex));
	//mSettings->setValue("UserInfo/name", Info.msUserName);

	mSettings->setValue("Test", QString::number(Info.miIndex));

}

void QSettingsTest::readSettings(SettingInfo &Info)
{
	//Info.miIndex = mSettings->value("Setting/add1", 0).toInt();
	//Info.msUserName = mSettings->value("UserInfo/name", 0).toString();

	Info.miIndex = mSettings->value("Test", -1).toInt();

}

3 完整内容

3 .h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QSettingsTest.h"

#include <QDebug>
#include <QSettings>



typedef struct SettingInfo
{
	int miIndex = 0;
	QString msUserName = "";
	QString msText = "";

}SettingInfo;

class QSettingsTest : public QMainWindow
{
    Q_OBJECT

public:
    QSettingsTest(QWidget *parent = nullptr);
    ~QSettingsTest();

private:
	void writeSettings(SettingInfo &Info);
	void readSettings(SettingInfo &Info);

private:
    Ui::QSettingsTestClass ui;

	QSettings *mSettings;
	QString msFilePath = "";

	SettingInfo mSettingInfo;

};



3.2 .cpp

#include "QSettingsTest.h"

QSettingsTest::QSettingsTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	msFilePath = QCoreApplication::applicationDirPath() + "/config.ini";
	mSettings = new QSettings(msFilePath, QSettings::NativeFormat);
	qDebug() << "Config file path:" << msFilePath;

}

QSettingsTest::~QSettingsTest()
{}



void QSettingsTest::writeSettings(SettingInfo &Info)
{
	//mSettings->setValue("Setting/add1", QString::number(Info.miIndex));
	//mSettings->setValue("UserInfo/name", Info.msUserName);

	//mSettings->setValue("Test", QString::number(Info.miIndex));

	if (!mSettings) {
		qDebug() << "Failed to create QSettings object.";
	}





}

void QSettingsTest::readSettings(SettingInfo &Info)
{
	//Info.miIndex = mSettings->value("Setting/add1", 0).toInt();
	//Info.msUserName = mSettings->value("UserInfo/name", 0).toString();

	//Info.miIndex = mSettings->value("Test", -1).toInt();

	if (!mSettings) {
		qDebug() << "Failed to create QSettings object.";
	}




}

4 其它文章

QT基本类使用详解系列文章包括以下内容:

QUUID 使用详解-CSDN博客

QDateTime 使用详解-CSDN博客

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

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

相关文章

PDF在线编辑器推荐!一站式解决PDF编辑难题!

当你要对PDF文件进行编辑时&#xff0c;一款PDF编辑器就十分重要。今天小编就为大家推荐几款PDF编辑器&#xff0c;有在线的&#xff0c;也有本地的&#xff0c;大家可以根据自己的需求体验选择&#xff01; Foxit PDF Edit 直达链接&#xff1a;editor.foxitsoftware.cn Fo…

大舍传媒-海外媒体发稿:为您打造全球品牌影响力

大舍传媒-海外媒体发稿&#xff1a;为您打造全球品牌影响力 在当今全球化的商业环境中&#xff0c;企业若想在激烈的市场竞争中脱颖而出&#xff0c;拓展全球市场&#xff0c;提升品牌影响力至关重要。大舍传媒的海外媒体发稿服务&#xff0c;正是您实现这一目标的得力助手。 …

某宝228滑块 请求头 bx_pp、bx_et、以及slide接口中参数n值。90%左右的成功率,轨迹不会爆,需要的联系

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关。 本文章未经许可禁止转载&#xff0c;禁止任何修改后二次传播&#xff0c;擅自使用本文讲解的技术而导致的任何意外&#xff…

PostgreSQL学习笔记:学习总结

一、架构 1. 常驻进程&#xff08;Postmaster&#xff09; 管理后端的常驻进程&#xff0c;默认监测UNIX Domain Socket和TCP/IP&#xff08;Windows等一部分平台只监测TCP/IP&#xff09;的5432端口&#xff0c;等待前端连接处理&#xff0c;监测的端口号可在设置文件postgre…

基于腾讯云的AI视频课程制作工具

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中&#xff0c;发现录制课程比较麻烦&#xff0c;要保证环境安静&#xff0c;保证录制过程不出错&#xff0c;很容易反复重复录制&#xff0c;为了解决重复录制的工作量&#xff0c;想通过 ai 课程制作工具&#xff0c;来解决…

注册安全分析报告:北外网校

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

【软考】设计模式之中介者模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点 1. 说明 1.用一个中介对象来封装一系列的对象交互。2.中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。3.中介者模式&#xff08;Mediator Pattern&…

Qt-自定义控件鼠标事件键盘事件定时器绘图

1. 自定义控件 1.1 创建自定义控件 1.在项目目录上右键&#xff0c; 选择 "Add New" 2.选择 "Qt" --> "Qt 设计师界面类" 3.根据需求选择模板&#xff0c;此处选择空窗口 4.设置类名 和 相关文件名 使用设计师界面类会产生三个文件&…

媒界:插混VS增程:魏牌蓝山用天花板Hi4诠释都市家庭用车最优解

在新能源混动领域&#xff0c;关于插混、增程谁才是混动最优解&#xff0c;一直业内争论的焦点。正如路遥知马力、日久见人心。对于新能源动力系统的评判标准来说&#xff0c;最好的答案就是路上见。 近日&#xff0c;一位媒体博主驾驶着魏牌全新蓝山从阿拉善到武汉往返狂飙30…

Python面向对象编程:封装和私有属性④

文章目录 1. 引言2. 什么是封装&#xff1f;3. 公有属性和方法4. 私有属性和方法5. 属性访问器&#xff08;Getters 和 Setters&#xff09;6. 使用 property 函数7. 综合示例7.1 项目结构7.2 模块代码__init__.pystudent.pycourse.pymanager.py 7.3 主程序代码main.py 7.4 运行…

cmake模板-支持编译动态/静态文件

代码链接&#xff1a;代码仓库 git clone https://gitee.com/etsuyou/cmake-template.git模板 模板截图 如何使用 在src和inc中写代码 此处用我默认提供的代码 ./go.sh cmake 生成Makefile ./go.sh make 生成bin文件和.a以及.so ./go.sh run app 运行 ./go.sh clean 以…

Tomcat服务部署及优化

一、Tomcat的基本介绍 1. tomcat是什么&#xff1f; Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&#xff0c;T…

QT QML 练习8-Simple Transformations

简单的转换&#xff08;Simple Transformations&#xff09; 转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移&#xff0c;旋转&#xff0c;缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始…

Python学习100天第9天之面向对象进阶

1 前言 在前面的章节我们已经了解了面向对象的入门知识&#xff0c;知道了如何定义类&#xff0c;如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发&#xff0c;我们还需要对Python中的面向对象编程进行更为深入的了解。 2 property装饰器…

AVLTree 旋转笔记(根据平衡因子插入的公式,贼好理解)

平衡因子 avltree是一棵每个节点的左右子树的高度差不超过1的二叉树搜索树&#xff0c;对于avltree最重要的就是对平衡因子的控制。 对于旋转我们重点要注意的是三个节点&#xff0c;以左旋举例&#xff0c;需要注意的就是parent&#xff0c;subr&#xff0c;subrl。而旋转的方…

MYSQL架构、执行过程和顺序

MYSQL架构、执行过程和顺序 一、前言 1.1、说明 就MySQL的架构&#xff0c;以及执行过程、sql执行顺序&#xff0c;以及一些相关学习分享内容。 在参考文章的基础上&#xff0c;会增加自己的理解、看法&#xff0c;希望本文章能够在您的学习中提供帮助。 如有错误的地方&a…

Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。 通过 Docker 部署 Jenkins 使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南&#xff1a; 1. 安装 Docker 如果你的系统上还没有安装 Docker&#xff0c;请根据操作系统…

春日技术问答:Spring Boot课程答疑

3系统分析 3.1可行性分析 通过对本课程答疑系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本课程答疑系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

【2D/3D-Lidar-SLAM】 Cartographer详细解读

【2D/3D-Lidar-SLAM】 Cartographer详细解读 1. 摘要 2. Cartographer系统数据处理流程2.1. 数据获取&#xff08;Input Sensor Data&#xff09;2.2 姿态外推器&#xff08;PoseExtrapolator&#xff09;2.3 局部建图&#xff08;Local SLAM&#xff09; 3. 关键模块实现 3.1 …

5、springboot-基础入门

1、系统要求 Java 8 & 兼容java14 .Maven 3.3idea 2019.1.2 1.1、maven设置 修改maven的settings.xml文件中的镜像&#xff0c;如下 <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyu…