QSettings и "свернутый", не плоский вывод - PullRequest
0 голосов
/ 11 апреля 2011

Корень реестра приложения может иметь древовидную структуру с «папками» и «узлами».PFile на Mac может иметь внутренние словари, которые похожи на папки.Все, что я делаю из QSettings, не имеет смысла, даже если я использую группу.Существует ли API, который позволит мне «создать папку», которая в Windows будет преобразована в «папку» реестра, и новый словарь в файле pfile?

1 Ответ

1 голос
/ 11 апреля 2011

Нет способа публикации того, что вы описываете. Но вы можете просто хранить типы контейнеров Qt, такие как QList и QMap, в QSettings. Полученный в результате реестр или plist будет не совсем тем, что вы хотите, но он служит тому, чего вы хотите достичь. Если, конечно, вы не хотите, чтобы реестр или plist были совместимы с другими приложениями, а не настраивайте их параметры таким образом.

Редактировать

На самом деле, после некоторого теста, в Mac QSettings действительно используют нативные plist для стандартных типов. Вам просто нужно поместить их в QVariant. Например:

QList<QVariant> array;
array << 1 << 2 << "3";
QMap<QString, QVariant> list;
list["one"] = 1;
list["two"] = "2";
list["3"] = array;
QSettings().setValue("somelist", list);

Приведенный выше код создает следующую запись:

<key>somelist</key>
<dict>
    <key>3</key>
    <array>
        <array>
            <integer>1</integer>
            <integer>2</integer>
            <string>3</string>
        </array>
    </array>
    <key>one</key>
    <integer>1</integer>
    <key>two</key>
    <string>2</string>
</dict>

Так что, пока вы конвертируете значения в QVariant, QSettings, похоже, пытается использовать нативные типы в plist. Я не знаю достаточно о реестре Windows, чтобы знать, делает ли он там то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...