Widget QT widoczny ze wszystkich klas

0

W programie chcę korzystać z różnych baz danych, zarówno plikowych jak i z baz zdalnych. Logicznym wydaje się więc wydzielenie klasy, która tym się zajmie. Niby prosta sprawa, ale... Tworzę sobie w QT Creator nowy okno dialogowe. Można wywołać je z main window z jakiejś funkcji, jeśli utworzę obiekt poza funkcją wywala błąd, bo widget musi być wywołany po konstruktorze mainwindow, jeśli umieszczę w funkcji wtedy nie da się przez extern przekazać obiektu do innych klas/widgetów. Zabawa z przekazywaniem do obiektów wskaźnika na widget zarządzający bazą to takie na około za bardzo i więcej problemów. W programie, który korzysta cały czas z połączenia z bazą danych nie ma sensu tworzyć i niszczyć obiektu odpowiedzialnego za połączenie. Dlaczego widget, a nie klasa? Bo gdzieś trzeba wybrać plik do otwarcia albo skonfigurować dane dostępowe do bazy zdalnej. No i przydadzą się operacje stricte administracyjne na bazie, przebudowa indeksów, przebudowa numeracji a autoincrement. Jedyne co mi przychodzi do głowy to rozbić to na klasę, która będzie odpowiadać za połączenie i widget w którym będzie okienko do wybierania połączenia, do operacji administracyjnych. Czy jest jakaś lepsza, logiczna metoda zrobienia tego?

I dodatkowa sprawa, bardziej z QT Cratorem niż z cpp. Nie widzę nigdzie z edytorze ui opcji ustawiania widgetów widzialny/niewidzialny. Mam po lewej toolbox, w zależności od taba inna zawartość okna głównego. Tworzenie tego ręcznie to sporo zabawy, więc zrobiłem kilka frame, z programu łatwo można ustawiać, które frame ma byś show, a które hide, tylko edytować to ciężko, bo jak mam 7 frame to każde zajmuje tylko wąski pasek. Więc zabawa ze zmienianiem szerokości przy edycji poszczególnych tabów, jeden powiększyć, drugi zmniejszyć. Wygodniejsze byłoby schowanie i pokazanie. Poszczególne frame mocno się różnią między sobą. Jedne mają kilka label i kilka lineedit, a inne mogą mieć ponad 50 elementów. Jak można poradzić sobie z takim problemem?

1

Widget GUI widoczny ze wszystkich form / widgetów przez np extern ... to nawet nie projektowy krzyk rozpaczy, to wycie
Pachnie mi jak borlandowy globalny wskażnik do formy czy inne patologie. Większosc "miszczów" tej tej technologii nie umiała myśleć inaczej niz zmienymi globalnymi

Myślę, że musisz oswoić rozdzielenie danych (Model), widoku (View) i akcji (Controler) . W ogóle duuużo wiedzy C++ / projektowanie obiektowe, a i w samym Qt nauczyć się powoływać np z menu

0
wer napisał(a):

W programie chcę korzystać z różnych baz danych, zarówno plikowych jak i z baz zdalnych. Logicznym wydaje się więc wydzielenie klasy, która tym się zajmie. Niby prosta sprawa, ale... Tworzę sobie w QT Creator nowy okno dialogowe. Można wywołać je z main window z jakiejś funkcji, jeśli utworzę obiekt poza funkcją wywala błąd, bo widget musi być wywołany po konstruktorze mainwindow, jeśli umieszczę w funkcji wtedy nie da się przez extern przekazać obiektu do innych klas/widgetów. Zabawa z przekazywaniem do obiektów wskaźnika na widget zarządzający bazą to takie na około za bardzo i więcej problemów. W programie, który korzysta cały czas z połączenia z bazą danych nie ma sensu tworzyć i niszczyć obiektu odpowiedzialnego za połączenie. Dlaczego widget, a nie klasa? Bo gdzieś trzeba wybrać plik do otwarcia albo skonfigurować dane dostępowe do bazy zdalnej. No i przydadzą się operacje stricte administracyjne na bazie, przebudowa indeksów, przebudowa numeracji a autoincrement. Jedyne co mi przychodzi do głowy to rozbić to na klasę, która będzie odpowiadać za połączenie i widget w którym będzie okienko do wybierania połączenia, do operacji administracyjnych. Czy jest jakaś lepsza, logiczna metoda zrobienia tego?

I dodatkowa sprawa, bardziej z QT Cratorem niż z cpp. Nie widzę nigdzie z edytorze ui opcji ustawiania widgetów widzialny/niewidzialny. Mam po lewej toolbox, w zależności od taba inna zawartość okna głównego. Tworzenie tego ręcznie to sporo zabawy, więc zrobiłem kilka frame, z programu łatwo można ustawiać, które frame ma byś show, a które hide, tylko edytować to ciężko, bo jak mam 7 frame to każde zajmuje tylko wąski pasek. Więc zabawa ze zmienianiem szerokości przy edycji poszczególnych tabów, jeden powiększyć, drugi zmniejszyć. Wygodniejsze byłoby schowanie i pokazanie. Poszczególne frame mocno się różnią między sobą. Jedne mają kilka label i kilka lineedit, a inne mogą mieć ponad 50 elementów. Jak można poradzić sobie z takim problemem?

Wszystkie problemy opisane tutaj można rozwiązać jednym wzorcem: Dependency Inversion.

1

@wer: Spróbuj wydzielić z Twojego opisu jakieś mniejsze problemy , bo na razie to mam wrażenie że wszystko jest problemem. Bierzesz sie za technologię bez podstaw ?
Zainwestuj ma Udemy w kurs c++ a potem Qt

0
Marius.Maximus napisał(a):

@wer:
Bierzesz sie za technologię bez podstaw ?

jak 3/2 klikających we wszelkich designerach GUI
"a miało być tak pięknie, wywiady, autografy "

Spróbuj wydzielić z Twojego opisu jakieś mniejsze problemy , bo na razie to mam wrażenie że wszystko jest problemem.

Zainwestuj ma Udemy w kurs c++ a potem Qt

Dzięki za podkreślenie tej kolejnosci.

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