我正在使用 QSettings 在我的 GUI 中进行更改。目前我已经了解如何将 QSetting 用于基本的键=值对。
[button]
enable = 1
Run Code Online (Sandbox Code Playgroud)
但我想要有等级组。像下面这样
[user1]
[button1]
enable = 1
[button2]
enable = 0
[user2]
[button1]
enable = 1
[button2]
enable = 0
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
谢谢你 :)
就像 @Tab 和 @vahancho 指出的那样,Qt 文档对此有以下说明:
您可以使用“/”字符作为分隔符来形成分层键,类似于 Unix 文件路径。例如:
Run Code Online (Sandbox Code Playgroud)settings.setValue("mainwindow/size", win->size()); settings.setValue("mainwindow/fullScreen", win->isFullScreen()); settings.setValue("outputpanel/visible", panel->isVisible());
虽然文档中没有明确说明,但mainwindow/titleBar/color支持更深的层次结构(例如, )。当使用设置为QSettings::IniFormat 的QSettings格式将a 持久保存到磁盘上的 *.ini 文件时,每个分层键的顶层部分(例如)将映射到Ini 部分。由于ini文件格式不支持嵌套部分,因此键的其余部分保持不变,并成为ini部分内的键。这可以在:syncmainwindowQConfFileSettingsPrivate::writeIniFile
if ((slashPos = key.indexOf(QLatin1Char('/'))) != -1) {
section = key.left(slashPos);
key.remove(0, slashPos + 1);
}
QSettingsIniSection &iniSection = iniMap[section];
iniSection.keyMap[key] = j.value();
Run Code Online (Sandbox Code Playgroud)
因此,像这样的设置settings.setValue("mainwindow/titleBar/color", "red");就变成了
[mainwindow]
titleBar/color = red
Run Code Online (Sandbox Code Playgroud)
在ini文件中。