Проверьте, существует ли реестр значений с QSettings

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

идея?

2 ответов


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=против 80).aspx

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

в зависимости от характера настройки и платформы, будет хранить их в реестре или в файле/etc.

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

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

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


используя 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;