我想做的是检查注册表中是否存在一个键(而不是值,键)。 我找不到任何检查的方法。
有什么想法吗?
childGroups()
获取键的列表。在Qt中,“组”似乎是Windows注册表中的键。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::NativeFormat
,则QSettings可以打开Windows键:
目前我还没有找到检查组的方法。但是你可以在组内设置一个键,并检查该键是否存在:
QString groupname = "group";
QString keyname = "/name";
QString name_read = settings.value(groupname + keyname, QString()).toString();
if(name_read == groupname){
...
}else {
// default action
}
这需要在名为“name”的组内添加一个额外的键,该键设置为您的组的名称。
QSettings settings("HKEY_LOCAL_MACHINE\\Software\\MySoft\\Star Runner\\CurrentVersion\\App Paths", QSettings::NativeFormat);
这样的默认设置,那么调用settings.childGroups()
将会创建一个空的注册表键HKEY_LOCAL_MACHINE\SOFTWARE\MySoft\Star Runner\CurrentVersion\App Paths
。这可能是一个不希望发生的副作用。我相信没有办法阻止这种情况的发生。 - Sacha Guyer