Quello che sto tentando di fare è controllare se nel registro esiste una chiave di registro (NON VALIDA, CHIAVE). Non riesco a trovare alcun modo per verificarlo.Verificare se esiste un registro valori con QSettings
Idea?
Quello che sto tentando di fare è controllare se nel registro esiste una chiave di registro (NON VALIDA, CHIAVE). Non riesco a trovare alcun modo per verificarlo.Verificare se esiste un registro valori con QSettings
Idea?
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.
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;
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. –