2013-01-16 11 views

risposta

7

Dipende dal modo in cui si utilizzerà il file delle impostazioni . Vuoi consentire all'utente della tua applicazione di dinamicamente cambiare le impostazioni nel file (file .ini ad esempio)? O le impostazioni devono essere impostate dalla GUI?

Se si utilizza una GUI per modificare le impostazioni, si consiglia di caricare le impostazioni principali all'inizio della propria applicazione da una classe statica, ad esempio.

void SettingsManager::loadSettings() 
{ 
    // .ini format example 
    QSettings settings(FileName, QSettings::IniFormat); 

    IntegerSetting = settings.value("SettingName", default).toInt(); 
    BooleanSetting = settings.value("SettingName", default).toBool(); 

    // ... 
} 

Poi, non c'è nessun problema per salvare i valori modificati on-demand a causa della QSettings ottimizzazione.

/** 
    * key is your setting name 
    * variant is your value (could be string, integer, boolean, etc.) 
    */ 
void SettingsManager::writeSetting(const QString &key, const QVariant &variant) 
{ 
    QSettings settings(FileName, QSettings::IniFormat); 

    settings.setValue(key, variant); 
} 
3

Se si è interessati, è possibile inserire ciascun gruppo logico di impostazioni dietro un'interfaccia. Quindi, creare una classe concreta che utilizza QSettings per recuperare le impostazioni su richiesta.

Se si scopre che si tratta di un collo di bottiglia delle prestazioni, creare una classe concreta che memorizza le impostazioni nella cache. (Non ho mai avuto bisogno di farlo. QSettings è sempre stato abbastanza veloce.)

2

Nella documentazione di QSettings, si dice che sia stato ottimizzato molto bene.

Internamente, mantiene una mappa di QStrings per QVarianti. Tutti i metodi di accesso sono estremamente utili e facili da usare.

Quando ho utilizzato QSettings, l'ho configurato in modo simile al loro esempio con le funzioni readSettings() e writeSettings(). Vedi questo example a circa metà della pagina.

Nel momento in cui chiamo readSettings() l'oggetto QSettings viene creato carica i valori su richiesta e mantiene tutte le impostazioni in alcune strutture.

Quindi, nella mia funzione principale per cui ho assicurarsi che ho creato il mio nome dell'applicazione e il mio nome dell'organizzazione, e ho anche utilizzare QSettings::setFormat, e poi, dopo che ogni volta che voglio accedere QSettings, ho creare un'istanza di QSettings con parametri di default e accedere alle impostazioni.

QSettings s; 
int val = s.value("Some_Group/some_setting", default_value).toInt(); 

// ... 

s.setValue("Some_Group/some_setting", val); 
Problemi correlati