2011-12-13 15 views

Odpowiedz

0

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.

14

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; 
+1

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. –