2011-12-13 11 views

risposta

0

EDIT:

Nel 2011 ho scritto:

Il Registro di sistema di Windows è un concetto e non si adatta nozioni cross-platform Qt. Dovrai utilizzare l'API di Windows o un wrapper C++ per questo.

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

Se le vostre esigenze sono più astratto per la vostra applicazione per salvare e ripristinare le proprie impostazioni, Qt ha un design multi-piattaforma di una cosa chiamata QSettings.

A seconda della natura dell'impostazione e della piattaforma, le memorizzeremo nel registro o in un file/ecc.

Ma sembra nella risposta da @mateuszb che QSettings possono aprire le chiavi di Windows se si utilizza QSettings::NativeFormat:

http://doc.qt.io/qt-5/qsettings.html#Format-enum

sarei ancora suggerisco che se si sta hardcoding qualcosa come "HKEY_LOCAL_MACHINE" nella tua fonte, che non sei veramente nello spirito di astrarre il tuo codice attraverso le piattaforme nel modo in cui Qt intende. Ma a quanto pare puoi (almeno nelle recenti versioni di Qt) farlo senza scavare sotto Qt e chiamare le API del registro di Windows.

14

Utilizzando QSettings è possibile aprire il genitore della chiave e recuperare l'elenco delle sue chiavi. Utilizzare la funzione childGroups() per ottenere l'elenco delle chiavi. Sembra che i "gruppi" in qt siano chiavi nel registro di Windows.

Questo è l'unico modo in cui ho trovato per verificare se esiste una chiave. In questo codice cerco la chiave "Cerca".

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

Nota: se non si sta utilizzando la chiave speciale ' "HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ di Windows \\ CurrentVersion \\ App Paths"', ma qualcosa di default come 'impostazioni QSettings (" HKEY_LOCAL_MACHINE \\ Software \\ MySoft \\ Star Runner \\ CurrentVersion \\ App Paths ", QSettings :: NativeFormat);", quindi chiamando 'settings.childGroups()' creerà una chiave di registro vuota 'HKEY_LOCAL_MACHINE \ SOFTWARE \ MySoft \ Star Runner \ CurrentVersion \ Percorsi app ». Questo potrebbe essere un effetto collaterale indesiderato. Credo che non ci sia modo di impedire che ciò accada. –