PyQt5 的 QSettings
是用于持久化存储和恢复应用程序配置的核心类,支持跨平台配置管理。以下是其核心功能与使用方法的详细说明:
一、基本概念
QSettings
通过键值对存储配置信息,支持多种存储格式:
- Windows:注册表或 INI 文件
- macOS/Linux:XML(plist)或 INI 文件
- 自定义路径:直接指定文件路径(如
config.ini
)
初始化时需指定组织名和应用名,或直接绑定配置文件:
python
from PyQt5.QtCore import QSettings
# 推荐全局初始化(主程序启动时设置)
app.setOrganizationName("MyCompany")
app.setApplicationName("MyApp")
settings = QSettings() # 自动关联组织名和应用名
# 或直接绑定文件
settings = QSettings("config.ini", QSettings.IniFormat)
二、核心功能
-
数据类型支持
支持存储字符串、整数、布尔值、列表、字节等类型,自动进行类型转换:python
settings.setValue("window/size", (800, 600)) # 存储元组 size = settings.value("window/size", QSize(800, 600)) # 读取并设置默认值
-
分组管理
使用beginGroup()
和endGroup()
组织配置层级:python
settings.beginGroup("Window") settings.setValue("size", window.size()) settings.setValue("position", window.pos()) settings.endGroup()
-
跨平台兼容
自动适配不同操作系统的存储方式,开发者无需手动处理路径差异。
三、典型使用场景
1. 保存窗口状态
在窗口关闭事件中保存配置:
python
def closeEvent(self, event):
settings = QSettings()
settings.setValue("geometry", self.saveGeometry()) # 窗口位置和大小
settings.setValue("state", self.saveState()) # 工具栏/停靠窗口状态
2. 恢复配置
在初始化时加载配置:
python
def __init__(self):
settings = QSettings()
geometry = settings.value("geometry")
if geometry:
self.restoreGeometry(geometry) # 恢复窗口状态
3. 动态配置加载(如串口参数)
结合 UI 控件动态更新配置:
python
# 从 INI 文件加载配置初始化 UI
self.com = settings.value("SETUP/COM_VALUE", "COM1")
self.comboBox_uart.addItem(self.com)
四、高级特性
-
作用域控制
通过QSettings.Scope
区分用户级和系统级配置:python
# 用户级配置(默认) user_settings = QSettings(QSettings.UserScope, "MyCompany", "MyApp") # 系统级配置 system_settings = QSettings(QSettings.SystemScope, "MyCompany", "MyApp")
-
同步与删除
sync()
:强制写入磁盘(通常自动调用)remove(key)
:删除指定键值clear()
:清空所有配置
五、注意事项
-
数据类型转换
读取时可能返回QVariant
类型,需显式转换:python
value = int(settings.value("numeric_value", 0))
-
默认值处理
未找到键值时返回None
,建议始终提供默认值:python
theme = settings.value("ui/theme", "dark")
-
文件格式选择
- **
QSettings.IniFormat
**:跨平台通用,易读易编辑 - **
QSettings.NativeFormat
**:自动使用系统最佳格式
- **
六、示例代码
python
# 初始化配置
settings = QSettings("config.ini", QSettings.IniFormat)
# 保存配置
settings.beginGroup("Connection")
settings.setValue("port", "COM4")
settings.setValue("baudrate", 115200)
settings.endGroup()
# 读取配置
port = settings.value("Connection/port", "COM1")
baudrate = int(settings.value("Connection/baudrate", 9600))
通过 QSettings
,开发者可以轻松实现配置的持久化管理,提升用户体验。如需更复杂的配置逻辑(如加密存储),可结合 QtCryptographicHash
扩展功能。