Проверьте, существует ли реестр значений с помощью QSettings
То, что я пытаюсь сделать, это проверить, существует ли в реестре ключ реестра (НЕ ЗНАЧЕНИЕ, КЛЮЧ). Я не могу найти способ проверить это.
Идея?
2 ответа
РЕДАКТИРОВАТЬ:
В 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
,В зависимости от характера настроек и платформы, они будут храниться в реестре или в файле / etc.
Но в ответе @mateuszb говорится, что QSettings может открывать ключи Windows, если вы используете QSettings::NativeFormat
:
http://doc.qt.io/qt-5/qsettings.html
Я по-прежнему предполагаю, что если вы жестко кодируете что-то вроде "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;
Я все еще не могу найти способ проверки групп. Однако вы можете установить ключ внутри группы и проверить наличие этого ключа:
QString groupname = "group";
QString keyname = "/name";
QString name_read = settings.value(groupname + keyname, QString()).toString();
if(name_read == groupname){
...
}else {
// default action
}
Для этого требуется дополнительный ключ внутри группы под названием "name", который соответствует имени вашей группы.