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(); // 立即保存(默认析构时保存)
六、注意事项
- 路径分隔用
/,跨平台通用
- 中文直接支持UTF-8,无需额外处理
- 读取时必须指定类型(toInt/toString等)
总结
- 核心初始化:
QSettings settings("config.ini", QSettings::IniFormat)
- 核心操作:
setValue() 写、value(键, 默认值).toXXX() 读
- 关键技巧:分组管理、数组存储、单例封装,
sync() 立即保存