在 QSettings 的 ini 文件中具有分层组

Sid*_*411 5 ini qt

我正在使用 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)

有没有办法做到这一点?

谢谢你 :)

Mit*_*tja 2

就像 @Tab 和 @vahancho 指出的那样,Qt 文档对此有以下说明:

您可以使用“/”字符作为分隔符来形成分层键,类似于 Unix 文件路径。例如:

settings.setValue("mainwindow/size", win->size());
settings.setValue("mainwindow/fullScreen", win->isFullScreen());
settings.setValue("outputpanel/visible", panel->isVisible());
Run Code Online (Sandbox Code Playgroud)

虽然文档中没有明确说明,但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文件中。