我要做的是检查注册表中是否存在注册表项(NOT VALUE,KEY)。我找不到任何方法来检查。
主意?
使用 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;
编辑:
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 并调用 Windows 注册表 API。
我仍然找不到检查组的方法。但是,您可以在组内设置一个密钥并检查该密钥是否存在:
QString groupname = "group";
QString keyname = "/name";
QString name_read = settings.value(groupname + keyname, QString()).toString();
if(name_read == groupname){
...
}else {
// default action
}
这需要在组内添加一个名为“name”的附加键,该键设置为您的组的名称。