Odświeżanie wartości tabel dla otwartych zakładek

0

Problem wygląda tak: mam powiedzmy 3 zakładki, których wyświetlane są w tabli nieco inne dane ale częściowo ze sobą powiązane, np. 1 zakładka - lista osób; 2 zakładka - lista osób i ich opłaty..

Korzystając teraz z menu jednej z zakładek, dodaje nowe dane ale na innej zakładce nie są one aktualizowane (ponieważ dane są pobierane z bazy danych w momencie jej otwierania..).

Pomyślałem więc, że można by było wprowadzić przycisk 'odśwież' na każdej zakładce, który dodatkowo zmieniałby np. kolor w momencie gdy na innej zakładce były przeprowadzone jakieś czynności 'edycyjne'.. i w takim przypadku musiałby istnieć jakiś 'system komunikacji' między zakładkami..

W sieci doczytałem, że podobną funkcję pełni np. wzorzec obserwatora tylko pisząc to w Qt framework mogę raczej wykorzystać mechanizm sygnałów i slotów, gdzie wysyłany byłby sygnał z informacją o zmianach..

Czekam na odzew.

0

Sorry, że podbijam, ale temat już "spadł" dość nisko a nikt nie udzielił konkretnej odpowiedzi / porady..
Może to było zwykłe przeoczenie więc (ten jeden raz) odświeżam temat..

0

Pokaż w jaki sposób dodajesz dane do jednej z tabel.
Wprowadzasz dane do linedita, zatwierdzasz np enterem i wywołujesz pewnie jakiś slot który dodaje te dane do aktualnie wyświetlanej tabeli tak? Nie do końca rozumiem jak to u Ciebie wygląda a bez tego ciężko mi pomóc.

0

Odpowiedziałem już w sumie komentarzu, ale..

Dane prowadzam do LineEdit'ów lub ComboBox'ów (w 95% przypadkach). Po wciśnięcu buttona dane są wprowadzane do bazy danych a następnie odświeżany jest model wyświetlany w QTableView..
Teraz chodzi o to, aby odnieść to "globalnie" do wszystkich otwartych zakładek..

0

Chciałem żebyś pokazał jak w kodzie obsługujesz to dodanie byłoby łatwiej Ci pomóc ale...

Po wciśnięcu buttona dane są wprowadzane do bazy danych a następnie odświeżany jest model wyświetlany w QTableView

Stwórz sobie slot w klasie i połącz go z sygnałem wciśnięcia tego buttona a w tym slocie dodawaj dane / aktualizuj tabele na pozostałych zakładkach.

0

nie podajesz kodu wiec ciężko pomoc:( ale tak ogólnie nasuwają mi się dwa rozwiania:

  • każda z zakładek ma sygnał zmianaDanych(),
  • każda z zakładek ma slot odswiezDane(),
  • tak spinasz sygnały i sloty aby emit sygnału zmianaDanych() z jakiejkolwiek zakładki wywoływał sloty odswiezDane() we wszystkich zakładkach,
  • i teraz jeśli w jakiś zakładce zmienisz dane to wołasz w niej sygnał zmianaDanych() i Od razu odświeżą ci się wszystkie zakładki.
  • w każdej zakładce masz slot odswiezDane(),
  • w zakładce w której zmieniasz dane, po zmianie wołasz slot odswiezDane(),
  • w pozostałych zakładkach slot odswiezDane() wołasz w momencie kiedy zakładka staje się aktywna.

Wszystko zależny od tego jak masz zbudowany swój program:)

0

@emacs , @kotlar - chyba właśnie tak to zrobię.. teraz już widzę, że można tak to zrobić..

Chodzi o to, że w róznych zakładkach (de facto jest to równoważne poniekąd z klasą) mam inny rodzaj danych pobieranych z bazy, ale dając niejako warstwę pośredniczącą, która będzie gromadzić wszystkie sygnały i następnie rozsyłać je odpowidnich slotów to to raczej zda egzamin :)

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