2013-01-16 15 views

Antwort

7

Es hängt von der Art und Weise Sie Ihre Einstellungen Datei verwenden. Möchten Sie den Benutzer Ihrer Anwendung auf dynamisch zulassen ändern Sie die Einstellungen in der Datei (.ini-Datei zum Beispiel)? Oder die Einstellungen müssen von der GUI gesetzt werden?

Wenn Sie eine GUI verwenden, um die Einstellungen zu ändern, empfehle ich Ihnen, die Haupteinstellungen zu Beginn Ihrer Anwendung von einer statischen Klasse zum Beispiel zu laden.

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

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

    // ... 
} 

Dann gibt es kein Problem der veränderten Werte auf Abruf wegen der QSettings Optimierung zu speichern.

/** 
    * 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

Wenn Sie besorgt sind, könnten Sie jede logische Gruppe von Einstellungen hinter eine Schnittstelle stellen. Erstellen Sie dann eine konkrete Klasse, die QSettings verwendet, um Einstellungen bei Bedarf abzurufen.

Wenn Sie feststellen, dass dies ein Leistungsengpass ist, erstellen Sie eine konkrete Klasse, in der die Einstellungen zwischengespeichert werden. (Ich musste das nie tun. QSettings war immer schnell genug.)

2

In der Dokumentation von QSettings steht, dass es wirklich gut optimiert wurde.

Intern speichert es eine Karte von QStrings zu QVariants. Alle Zugriffsmethoden sind äußerst nützlich und einfach zu verwenden.

Wenn ich QSettings verwendet habe, habe ich es ähnlich zu ihrem Beispiel mit readSettings() und writeSettings() Funktionen eingerichtet. Sehen Sie diese example über die Hälfte der Seite.

In dem Moment, als ich readSettings() aufrufen, wird das QSettings-Objekt erstellt, es lädt die Werte bei Bedarf und es behält alle Einstellungen in einer Struktur.

Also in meiner Hauptfunktion stelle ich sicher, dass ich meinen Anwendungsnamen und meinen Organisationsnamen einrichte, und ich benutze auch QSettings::setFormat, und danach, wenn ich auf QSettings zugreifen möchte, erstelle ich eine Instanz von QSettings mit Standardparametern und Greifen Sie auf die Einstellungen zu.

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

// ... 

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