QSettings + INI 笔记

QSettings + INI 笔记

一、初始化

cpp 复制代码
// 创建/打开INI配置文件
QSettings settings("config.ini", QSettings::IniFormat);

二、基础读写

操作 代码示例 说明
写入 settings.setValue("组/键", 值); 支持int/bool/QString等
读取(带默认值) settings.value("组/键", 默认值).toXXX(); 需指定类型(toInt/toString等)
cpp 复制代码
// 示例:读写
settings.setValue("Window/width", 800);       // 写
int w = settings.value("Window/width", 1024).toInt(); // 读

三、使用技巧

1. 分组管理

cpp 复制代码
settings.beginGroup("Window"); // 进入分组
settings.setValue("width", 800);
settings.endGroup(); // 退出分组

2. 数组存储

cpp 复制代码
// 写数组
settings.beginWriteArray("recentFiles");
for(int i=0; i<files.size(); i++) {
    settings.setArrayIndex(i);
    settings.setValue("path", files[i]);
}
settings.endArray();

// 读数组
int size = settings.beginReadArray("recentFiles");
for(int i=0; i<size; i++) {
    settings.setArrayIndex(i);
    QString p = settings.value("path").toString();
}
settings.endArray();

3. 配置文件路径

cpp 复制代码
// 1. 应用目录(便携):./config.ini
// 2. 系统配置目录(标准):
QString path = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini";
// 3. 绝对路径:D:/app/config.ini

四、示例

cpp 复制代码
class AppConfig {
public:
    static AppConfig& instance() { static AppConfig c; return c; }
    void load() { // 加载配置
        QSettings s("config.ini", QSettings::IniFormat);
        windowW = s.value("Window/width", 800).toInt();
        autoSave = s.value("General/autosave", true).toBool();
    }
    void save() { // 保存配置
        QSettings s("config.ini", QSettings::IniFormat);
        s.setValue("Window/width", windowW);
        s.setValue("General/autosave", autoSave);
        s.sync(); // 立即写入
    }
    // 配置项
    int windowW = 800;
    bool autoSave = true;
private:
    AppConfig() = default; // 单例私有化构造
};

五、常用操作

cpp 复制代码
settings.contains("Window/width"); // 检查键是否存在
settings.remove("Window/width");   // 删除键/分组
settings.allKeys();                // 获取所有键
settings.clear();                  // 清空所有配置
settings.sync();                   // 立即保存(默认析构时保存)

六、注意事项

  1. 路径分隔用 /,跨平台通用
  2. 中文直接支持UTF-8,无需额外处理
  3. 读取时必须指定类型(toInt/toString等)

总结

  1. 核心初始化:QSettings settings("config.ini", QSettings::IniFormat)
  2. 核心操作:setValue() 写、value(键, 默认值).toXXX() 读
  3. 关键技巧:分组管理、数组存储、单例封装,sync() 立即保存
相关推荐
sbjdhjd12 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
小徐不徐说14 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
UIU11414 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
小王C语言14 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
论文复现现场14 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi14 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
TMedical15 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
海绵宝宝的月光宝盒15 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
秋天的怀念_David15 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院16 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper