7

我要做的是检查注册表中是否存在注册表项(NOT VALUE,KEY)。我找不到任何方法来检查。

主意?

4

3 回答 3

18

使用 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;
于 2012-02-24T18:57:03.817 回答
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。

于 2011-12-13T05:17:45.683 回答
0

我仍然找不到检查组的方法。但是,您可以在组内设置一个密钥并检查该密钥是否存在:

QString groupname = "group";
QString keyname = "/name";
QString name_read = settings.value(groupname + keyname, QString()).toString();

if(name_read == groupname){
    ...
}else {
    // default action
}

这需要在组内添加一个名为“name”的附加键,该键设置为您的组的名称。

于 2020-03-20T16:07:40.420 回答