检查QSettings是否存在值注册表

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)


Hos*_*ork 0

编辑:

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。