2013-01-16 13 views

Odpowiedz

7

To zależy od sposobu będzie używany plik ustawień . Czy chcesz zezwolić użytkownikowi aplikacji na dynamiczne zmienianie ustawień w pliku (na przykład pliku .ini)? Lub ustawienia muszą być ustawione przez GUI?

Jeśli używasz GUI do zmiany ustawień, radzę ci załadować na przykład główne ustawienia na początku aplikacji z klasy statycznej.

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

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

    // ... 
} 

Następnie, nie ma problemu, aby zapisać zmienione wartości na żądanie ze względu na optymalizację QSettings.

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

Jeśli obawiasz się, możesz umieścić każdą logiczną grupę ustawień za interfejsem. Następnie zbuduj konkretną klasę, która używa QSettings w celu pobrania ustawień na żądanie.

Jeśli okaże się, że jest to wąskie gardło, zbuduj konkretną klasę, która buforuje ustawienia. (Nigdy nie musiałem tego robić) QSettings zawsze był wystarczająco szybki.)

2

W dokumentacji QSettings mówi, że została zoptymalizowana bardzo dobrze.

Wewnętrznie zachowuje mapę QStrings do QVariants. Wszystkie metody dostępu są niezwykle użyteczne i łatwe w użyciu.

Kiedy użyłem QSettings, ustawić go w sposób podobny do ich przykład readSettings() i writeSettings() funkcji. Zobacz to example mniej więcej w połowie strony.

W momencie wywołania readSettings() tworzony jest obiekt QSettings, który ładuje wartości na żądanie i zachowuje wszystkie ustawienia w strukturze.

Tak więc w mojej głównej funkcji upewniam się, że ustawiłem nazwę aplikacji i nazwę mojej organizacji, a także używam QSettings::setFormat, a następnie, gdy chcę uzyskać dostęp do QSettings, tworzę instancję QSettings z domyślnymi parametrami i uzyskać dostęp do ustawień.

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

// ... 

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