Podpięcie ustawień użytkownika do klasy logiki

0

Mam w programie ( GUI ) kilka stron z ustawieniami ( LineEdit, ToolButton, ComboBox, itp ) które mają jakieś wartości domyślne. W klasie "logiki" mam metodę

Utility::getSettings();

i teraz chciałbym to rozwiązać tak żebym za każdym razem przed wykonaniem konkretnej operacji nie musiał sprawdzać wszystkich wartości w celu znalezienia zmian w ustawieniach. Pytanie czy to jest miejsce aby zastosować wzorzec observer?
Mógłbym to rozwiązać stosując do każdego widgetu mechanizmu Signal&Slot ale to chyba nie było by dobre wykonanie bo tych slotów było by mnóstwo...
Chciałbym uzyskać coś na zasadzie QButtonGroup gdzie grupuje sobie wszystkie widgety ustawień i podłączam jeden Signal - Slot gdzie w slocie dostaję informację ( np wskaźnik / vector wskaźników ) na widgety których wartości uległy zmianie i wtedy pobieram sobie nowe dane tylko z tych elementów.

0

Podpowie ktoś jak to mogę rozwiązać? ;)
Chodzi mi o sama koncepcję tego, czy w tym wypadku każda kontrolka z kart ustawień powinna być podpięta osobno pod jakiś slot ( co tworzy tych slotów w klasie mnóstwo ) czy może można to jakoś zgrupować i otrzymywać vector wskaźników na kontrolki których wartości uległy zmianie?
Czy to miejsce aby zastosować wzorzec obserwator?

0

zrób sobie jeden przycisk reload settings i już

on_pushbutton_clicked() wyciągasz wszystko co chcesz i już

po co sprawdzać ustawienia milion razy jak możesz załadowywać je jednym kliknięciem i pracować na ostatnich załadowanych

signal/slots działają podobnie do wzorca obs

0

No tak tylko że użytkownik w trakcie działania programu może sobie wejść w opcje i zmienić jedno z kilkudziesięciu ustawień a te ustawienia muszę sprawdzać zawsze przed wykonaniem określonych akcji ( np otwarcia jakiegoś dokumentu ) i teraz mam to zrobione w jednym slocie tylko że za każdym razem sprawdzam wartości wszystkich kontrolek a chciałbym sprawdzać i aktualizować tylko tych które uległy zmianie. To byłoby o wiele bardziej wydajne.
Chyba zostaje podpiąć do każdej kontrolki odpowiedni slot...

1

Utwórz sobie dwie funkcje pomocnicze do zapisu i odczytu ustawień.
np:

void MainWindows::readSettings()
{
    QSettings settings(QSettings::IniFormat,
                       QSettings::UserScope,
                       QCoreApplication::organizationName(),
                       QCoreApplication::applicationName());

    settings.setFallbacksEnabled(false);
    settings.beginGroup("nazwaGrupy");
    ui->textBox->setText(settings.value("Wartosc").toString())
    settings.endGroup();
}

void MainWindows::writeSettings()
{
    QSettings settings(QSettings::IniFormat,
                       QSettings::UserScope,
                       QCoreApplication::organizationName(),
                       QCoreApplication::applicationName());

    settings.setFallbacksEnabled(false);
    settings.beginGroup("nazwaGrupy");
    settings.setValue("Wartosc", ui->textBox->text());
    settings.endGroup();
}

readSettings wczytujesz na końcu konstruktora okna
writeSettings w closeEvent.

0

@savior tak też to chciałem rozwiązać tylko w trakcie działania aplikacji np przed łączeniem się z siecią użytkownik może zmieniać poszczególne ustawienia po kilkanaście razy i teraz tych ustawień jest kilkadziesiąt i chciałem po prostu uniknąć sprawdzania za każdym razem po wyjściu z sekcji ustawień wszystkich pól a ograniczyć się do sprawdzenia tylko tych które zostały zmienione. Gdybym metodę którą podałeś wywoływał również w trakcie działania programu to też było by ok bo nadpisywałbym konkretne ustawienia ale i tak musiałbym przelecieć po wszystkich możliwych kontrolkach aby sprawdzić ich wartość. Zostaje SIGNAL&SLOT ;)

0

Może nie sprawdzaj po prostu czy coś zmieniał tylko zapisuj jak leci.
A jeśli nie to:
wczytaj ustawienia do modelu, potem do każdego pola modelu podepnij odpowiedni komponent (QComboBox, QLineEdit, itp) do edycji, a na koniec zapisz model :)
Po każdej zmianie czegokolwiek w modelu dane będziesz miał od razy uaktualnione. I wtedy zapiszesz model.

1 użytkowników online, w tym zalogowanych: 0, gości: 1