Проверьте, существует ли реестр значений с 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;