Krzysztof Wesołowski Programowanie, elektronika, automatyka – doświadczenia i projekty

9maj/10

Zapisywanie ustawień aplikacji – QSettings w QT

Kontynuując tradycję rzadkich wpisów o ciekawych rzeczach które warto poznać/wykorzystać chciałbym wam przybliżyć trochę klasę QSettings. Do tej pory większość moich aplikacji nie potrafiło sensownie obsługiwać pamiętania różnych drobiazgów między uruchomieniami. Często najważniejsze rzeczy zapisywano w jakimś "własnym" typie plików, podczas gdy cała reszta była resetowana po każdym uruchomieniu.

Klasa QSettings rozwiązywała część tych problemów - pozwalając skierować grupę ustawień do pliku/rejestru. Niestety, pierwszy wymyślony sposób ich użycia stał się bardzo szybko uciążliwy - zapisywanie setek ustawień w jednym miejscu, pilnowanie aby odczyt zgadzał się z zapisem - jak łatwo się domyślić szybko stało się to nie do opanowania.

Niedawno czytając dokumentację, i stając przed podobnym problemem znalazłem sensowniejsze podejście - wraz z dostarczonymi metodami pozwalające zminimalizować nakład pracy.

Zacznijmy od samego początku naszego programu, dostarczając parę istotnych informacji:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QApplication::setOrganizationName("RainLabs");
QApplication::setOrganizationDomain("rainlabs.pl");
QApplication::setApplicationName("Orbi Eye");
QApplication::setApplicationVersion("0.2 alpha");

AutoPhotoAdvanced b;
b.setWindowTitle(QApplication::applicationName()+" v"+QApplication::applicationVersion());
b.show();
return a.exec();

}

Po takim wywołaniu każda klasa potrzebująca skorzystać z ustawień może to zrobić niezwykle szybko i wygodnie - np. w konstruktorze/destruktorze, za pomocą:

QSettings settings;
settings.setValue(....) / settings.value(...)

dzięki takiemu podziałowi każde ustawienia są niezależne, zaś dokonane na początku ustawienia aplikacji pozwalają korzystać z domyślnego konstruktora, co ułatwia ich używanie w całym programie, nie uciekając się do kopiowania kawałka kodu tam i z powrotem lub co gorsza pamiętania jakie argumenty przekazać za każdym razem konstruktorowi.

Komentarze (0) Trackbacks (0)

Przepraszam, dodawanie komentarzy zablokowane.

Trackbacks are disabled.