Istnieją dwa możliwe sposoby:Jak załadować ustawienia aplikacji w Qt z QSettings
- obciążenie wszystkie ustawienia do jakiejś struktury
- wartości obciążeń na żądanie
Które podejście jest lepsze?
Istnieją dwa możliwe sposoby:Jak załadować ustawienia aplikacji w Qt z QSettings
Które podejście jest lepsze?
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);
}
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.)
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);
Jaki jest przypadek użycia? –
To edytor tekstu. Ustawienia takie jak windows-maxiimized, recent-files i tak dalej. – user1180567