Проверьте, существует ли реестр значений с помощью QSettings - PullRequest
7 голосов
/ 13 декабря 2011

То, что я пытаюсь сделать, это проверить, существует ли в реестре ключ реестра (NOT VALUE, KEY).Я не могу найти способ проверить это.

Идея?

Ответы [ 2 ]

16 голосов
/ 24 февраля 2012

Используя QSettings, вы можете открыть родительский ключ ключа и получить список его ключей.Используйте функцию childGroups(), чтобы получить список ключей.Кажется, что "группы" в qt являются ключами в реестре Windows.

Это единственный способ проверить, существует ли ключ.В этом коде я ищу ключ "SearchedKey".

QSettings settings(
    "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\App Paths",
    QSettings::NativeFormat
);

if (settings.childGroups().contains("SearchedKey", Qt::CaseInsensitive))
    std::cout << "Key exists" << std::endl;
else
    std::cout << "Key doesn't exist" << std::endl;
0 голосов
/ 13 декабря 2011

EDIT:

В 2011 году я написал:

Реестр является концепцией Windows и не соответствует кроссплатформенным понятиям Qt. Для этого вам придется использовать Windows API или оболочку C ++.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724875(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/xka57xy4(v=vs.80).aspx

Если ваши приложения более абстрактны для сохранения и восстановления своих настроек, Qt имеет кроссплатформенный дизайн, называемый QSettings.

В зависимости от характера настроек и платформы, сохранит их в реестре или в файле / и т. Д.

Но в ответе @mateuszb говорится, что QSettings может открывать ключи Windows, если вы используете QSettings::NativeFormat:

http://doc.qt.io/qt-5/qsettings.html#Format-enum

Я бы по-прежнему предлагал, чтобы, если вы жестко запрограммировали что-то вроде "HKEY_LOCAL_MACHINE" в свой источник, вы на самом деле не в духе абстрагирования своего кода между платформами в соответствии с намерениями Qt. Но вы, очевидно, можете (по крайней мере, в последних версиях Qt) делать это, не копаясь под Qt и не вызывая API реестра Windows.

...