首页 > 其他分享 >Qt QSetting配置管理

Qt QSetting配置管理

时间:2025-01-10 11:01:37浏览次数:1  
标签:QSettings Qt settings Windows 配置管理 设置 注册表 QSetting

QSetting 配置管理

QSetting是Qt框架中用于管理应用程序配置和设置的类。它提供了一种简单的方式来存储和检索应用程序的设置,通常用于保存用户偏好、窗口位置、最近打开的文件等信息。

主要功能

  • 跨平台支持QSetting在不同操作系统上使用不同的后端存储:
    • Windows:使用注册表
    • macOS:使用属性列表文件(plist)。
    • Linux/Unix:使用INI文件。
  • 简单的键值对存储QSetting使用键值对的方式存储数据,字符串,值可以是QVariant支持的任何类型(如intQStringQColor等)。
  • 分组支持:可以通过beginGroup()endGroup()方法来组织设置,类似于文件系统中的目录结构。
  • 自动保存:在QSetting对象销毁时会自动将数据写入存储介质,也可以通过sync()方法手动写入。

基本用法

创建QSetting对象

  1. 通过组织名称和应用程序名称来初始化 —— 默认存储方式(Windows使用注册表存储)
// 使用应用程序名称和组织名称初始化 QSettings
QSettings settings("MyCompany", "MyApp");
  1. 通过指定存储格式(如ini文件)和文件路径

    在指定存储格式的方式下,在Windows平台下不会使用注册表来存储。

    如果文件不存在会自动创建

// 或者指定存储格式和文件路径
QSettings settings("/path/to/settings.ini", QSettings::IniFormat);

写入设置

通过setValue()以键值对的形式写入设置,键必须为字符串类型

settings.setValue("size", QSize(800, 600));
settings.setValue("position", QPoint(100, 100));
settings.setValue("recentFiles", QStringList() << "file1.txt" << "file2.txt");

分组管理

通过beginGroup()来开启分组,通过endGroup()结束分组,分组中的子项访问通过"/"链接来访问对应的键值对,如"window/size"。

settings.beginGroup("window");
settings.setValue("size", QSize(800, 600));
settings.setValue("position", QPoint(100, 100));
settings.endGroup();

读取设置

通过value(键,值)来访问对应的设置

QSize size = settings.value("window/size", QSize(400, 300)).toSize();
QPoint pos = settings.value("window/position", QPoint(50, 50)).toPoint();
QStringList recentFiles = settings.value("recentFiles").toStringList();

删除设置

通过remove(键)删除对应的设置

settings.remove("window/size");  // 删除单个键
settings.remove("window");       // 删除整个分组

同步设置

sync()可以控制手动写入存储介质即Windows写入注册表

settings.sync();  // 手动将设置写入存储介质

高级用法

默认值

在读取设置时,可以提供一个默认值。当键不存在时,QSetting将返回这个默认值。

QString theme = settings.value("theme", "default").toString();

枚举所有键

通过allKeys()可以获取到所有键的列表

QStringList keys = settings.allKeys();
for (const QString &key : keys) {
    qDebug() << key << ":" << settings.value(key);
}

检查键是否存在

if (settings.contains("window/size")) {
    // 键存在
}

清除所有设置

settings.clear();

注意事项

  • 非线程安全QSetting不是线程安全的,如果需要在多线程环境中使用,需要额外的同步机制。
  • 性能:频繁的读写操作可能会影响性能,尤其是Windows上使用注册表时,建议将多个设置合并为一次写入操作。

使用QSetting完成程序开机自启

"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"是注册表中的路径,表示当前用户的启动项。在这个路径下,Windows 会查找用户登录时需要自动启动的程序。

// 通过注册表路径设置开机自启
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
settings.setValue("autoLoginQatarApp", QCoreApplication::applicationFilePath().replace('/', '\\'));

QSettings::NativeFormat用于指示 QSettings 使用操作系统的原生方式来存储配置数据

标签:QSettings,Qt,settings,Windows,配置管理,设置,注册表,QSetting
From: https://www.cnblogs.com/1873cy/p/18663395

相关文章

  • 基于Qt的OFD阅读器开发原理与实践
    摘要本文详细探讨了基于Qt开发OFD阅读器的原理与实践。通过解析OFD文件格式、构建文档结构、实现页面渲染、处理用户交互以及进行性能优化,本文展示了如何使用Qt框架开发一个功能强大、性能优异的OFD阅读器。文章还提供了示例代码和未来发展方向,为开发者提供了全面的参考和指导。......
  • 【PyQt】pyqt进行封装程序为exe文件
    @[toc]pyqt进行封装程序为exe文件pyqt进行封装程序为exe文件将PyQt程序打包为可执行文件(.exe)可以使用PyInstaller工具。PyInstaller是一个流行的Python打包工具,能够将Python脚本及其依赖项打包为独立的可执行文件。以下是详细步骤:1.安装PyInstaller首先,确保你......
  • RaceGame-Qt游戏项目构建-游戏地图
    RaceGame-Qt游戏项目构建-游戏地图游戏地图概述游戏界面固定为450px*800px;游戏地图由10px*10px像素的方块构成,采用等比缩放记录在一个45*80的array容器中。GameMap相关类GameMap相关类放在gamemap.h头文件中,对应的源文件是gamemap.cpp。一、classGameMa......
  • RaceGame-Qt游戏项目构建-图形界面
    RaceGame-Qt游戏项目构建-图形界面Qt提供了很多图形库,可以直接使用,绘制游戏地图、更新玩家位置,显示操作按钮等。游戏的主体逻辑已经通过Player类和GameMap类实现,只需要根据玩家信息、地图信息,绘制出图形化界面即可。游戏界面概述游戏界面的绘制主要包括:地图/墙体,玩家,操作......
  • RaceGame-Qt游戏项目构建-游戏框架
    RaceGame-Qt游戏项目构建-游戏框架游戏企划使用Qt图形化界面开发一款名为RaceGame的小游戏,游戏玩法是4方玩家(方块)在带有墙体的地图中以一定速度、一定方向前进,碰到墙体会反弹,最终玩家按照到达目的地的先后顺序排名。游戏过程中,玩家可以通过界面上的Button按钮进行释放技能,......
  • qt qlistWidget和QListWidgetItem的使用
    mainwindow.ui如图,用到的元素比较简单,自己创建就可以mainwindow.h点击查看代码#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QFileDialog>#include<QDir>#include<QDebug>#include<QGridLayout>#include<QHBoxLayou......
  • docker快速搭建部署mqtt
    1、拉取的是最新版本#拉取的是最新版本dockerpullemqx/emqx:latest#当然可以指定版本dockerpullemqx/emqx:latest:v5.02、创建临时容器dockerrun-d--namemqtt--privileged=true-p1883:1883-p8883:8883-p8083:8083-p8084:8084-p8081:8081-p18083......
  • Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求
    一、前言说明这几个功能是近期定制的功能,也非常具有代表性,核心就是之前登录和设备信息都是在本地,存放在数据库中,数据库可以是本地或者远程的,现在需要改成通过网络API请求的方式,现在很多的服务器很强大,都提供了各种API接口,包括登录和拉取回放等,相当于直接对接这些服务器的接口去开......
  • 写一个pyqt5程序的步骤(类,继承,init,类做参数等)
    kimi生成的,两种区别和相似在哪。类没有init函数会怎样?kimi生成importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QVBoxLayout,QLineEditclassExample(QWidget):def__init__(self):super().__init__()self.initUI()definitUI......
  • 【行空板K10】MQTT Plus用户库:对Mind+的MQTT功能进行增强
    目录引言Mind+MQTT功能实现的分析功能增强对Clientid的支持对保留消息的支持用户库的编写基本结构config.jsonmain.tslibraries示例程序巴法云华为云结语本文首发于DFRobot论坛:MQTTPlus用户库:对Mind+的MQTT功能进行增强DF创客社区。引言前面的博文介绍......