You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将QSettings生成的ini文件设为只读,避免用户篡改配置?

QSettings Ini文件只读限制的实现方案

QSettings本身没有内置只读开关,可通过以下几种路径实现需求:

方案1:操作系统层设置文件只读权限

实现成本最低,仅需在配置写入完成后修改文件系统级权限,QSettings读取只读文件无影响,写入时会静默失败(可通过status()方法判断写入结果)。
示例代码:

import os
import stat
from PyQt6.QtCore import QSettings

# 初始化配置并写入内容
settings = QSettings("config.ini", QSettings.Format.IniFormat)
settings.setValue("window/width", 1280)
settings.setValue("window/height", 720)
settings.sync() # 强制刷新写入磁盘

# 获取配置文件路径并设置为全局只读
config_path = settings.fileName()
os.chmod(config_path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)

如果后续需要修改配置,可临时收回只读权限、写入完成后再重新设置即可。

方案2:存储到普通用户无写入权限的系统路径

将配置文件存到系统级目录,普通用户默认无法修改:

  • Windows:C:\ProgramData\你的应用名称\
  • Linux:/etc/你的应用名称/
  • macOS:/Library/Preferences/你的应用名称/
    仅当程序以管理员/root权限运行时才能写入配置,普通用户运行时仅能读取,适合多用户场景下全局配置的管控。

方案3:配置篡改校验(防刻意修改)

如果要避免用户手动修改文件权限后篡改配置,可增加哈希校验逻辑:
每次程序正常写入配置时,将所有配置项计算哈希值存入配置文件;读取时先校验哈希,不一致则判定为用户非法修改,直接加载默认配置或弹出提示。
示例代码:

import hashlib
import json
from PyQt6.QtCore import QSettings

def calc_config_hash(settings: QSettings) -> str:
    config_items = {}
    for key in settings.allKeys():
        if key != "internal/hash": # 排除哈希字段本身
            config_items[key] = settings.value(key)
    # 排序后序列化保证哈希计算结果稳定
    sorted_str = json.dumps(config_items, sort_keys=True).encode("utf-8")
    return hashlib.sha256(sorted_str).hexdigest()

# 读取配置时校验
settings = QSettings("config.ini", QSettings.Format.IniFormat)
saved_hash = settings.value("internal/hash", "")
current_hash = calc_config_hash(settings)
if saved_hash and current_hash != saved_hash:
    # 配置被篡改,重置为默认值
    settings.clear()
    settings.setValue("window/width", 1280)
    settings.setValue("window/height", 720)
    # 保存新的哈希值
    settings.setValue("internal/hash", calc_config_hash(settings))
    settings.sync()

方案4:固定配置存入资源文件

如果配置完全不需要修改,可直接将ini文件打入Qt资源系统(qrc),资源文件默认只读,用户完全无法修改,适合静态配置场景。


内容的提问来源于stack exchange,提问作者Gillian Grace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:18:04