Kaz*_*uma 7 registry qt qsettings
我要做的是检查注册表中是否存在注册表项(NOT VALUE,KEY).我找不到任何方法来检查.
理念?
mat*_*szb 16
使用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;
Run Code Online (Sandbox Code Playgroud)
编辑:
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。