Co próbuję zrobić, to sprawdzić, czy klucz rejestru (NOT VALUE, KEY) istnieje w rejestrze. Nie mogę znaleźć żadnego sposobu, żeby to sprawdzić.Sprawdź, czy istnieje rejestr wartości z QSettings
Pomysł?
Co próbuję zrobić, to sprawdzić, czy klucz rejestru (NOT VALUE, KEY) istnieje w rejestrze. Nie mogę znaleźć żadnego sposobu, żeby to sprawdzić.Sprawdź, czy istnieje rejestr wartości z QSettings
Pomysł?
EDIT:
W 2011 roku pisałem:
Rejestr jest koncepcja systemu Windows i nie pasuje wieloplatformowe pojęcia Qt. Będziesz musiał użyć do tego interfejsu API Windows lub 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
Jeśli Twoje potrzeby są bardziej abstrakcyjne dla aplikacji, aby zapisać i przywrócić swoje ustawienia Qt ma konstrukcję wieloplatformowe czegoś zwanego
QSettings
.W zależności od charakteru ustawienia i platformy, zostaną one zapisane w rejestrze lub w pliku/etc.
Ale wydaje się odpowiedź przez @mateuszb że QSettings może jeśli używasz QSettings::NativeFormat
otworzyć klawiszy systemu Windows:
http://doc.qt.io/qt-5/qsettings.html#Format-enum
bym nadal sugerują, że jeśli coś takiego sztywno „HKEY_LOCAL_MACHINE” w twoim źródle, że tak naprawdę nie jesteś w duchu abstrakcjonowania kodu na platformach w sposób zamierzony przez Qt. Ale najwyraźniej możesz (przynajmniej w ostatnich wersjach Qt) zrobić to bez wykopywania pod Qt i wywoływania funkcji API rejestru Windows.
Za pomocą QSettings można otworzyć rodzica klucza i wyświetlić listę jego kluczy. Użyj funkcji childGroups()
, aby uzyskać listę kluczy. Wygląda na to, że "grupy" w qt są kluczami rejestru Windows.
To jedyny sposób, w jaki udało mi się sprawdzić, czy klucz istnieje. W tym kodzie szukam klucza "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;
Uwaga: Jeśli nie używasz specjalnego klucza "HKEY_LOCAL_MACHINE' \\ Software \\ Microsoft \\ Okna \\ CurrentVersion \\ App Paths"', ale coś podobnego domyślne ustawienia QSettings '(" HKEY_LOCAL_MACHINE \\ Oprogramowanie \\ MySoft \\ Star Runner \\ CurrentVersion \\ Ścieżki aplikacji ", QSettings :: NativeFormat);', a następnie wywołanie 'settings.childGroups()' utworzy pusty klucz rejestru 'HKEY_LOCAL_MACHINE \ SOFTWARE \ MySoft \ Star Runner \ CurrentVersion \ App Paths'. Może to być niepożądany efekt uboczny. Uważam, że nie ma sposobu, aby temu zapobiec. –