Tworzenie nowego widgetu podczas trwania programu.
-
Witam, piszę swój pierwszy program w QT, chciałem zrobić coś w stylu kreatora planu tygodniowego. Chciałem aby każdy dzień tygodnia był osobnym widgetem osadzonym na widgecie głównym, na który chciałem dodawać inny widget o nazwie Wydarzenie, który składałby się z trzech etykiet i przycisku usuwającego ten widget. Moja klasa Wydarzenie dziedziczy po klasie QWidget. Pytanie: czy coś takiego wgl ma sens, czy tworzenie widzetów podczas pracy programu jest wgl możliwe? Pozdrawiam.
-
Tworzenie QWidgetów w trakcie pracy programu jest możliwe i ma sens :)
Żeby dobrze taki widget upozycjonować, musisz mu dać odpowiedni parent i (najczęściej, ale żależy od tego, jak stworzyłeś UI) wsadzić do odpowiedniego layoutu.
-
Dzięki za szybką odpowiedź :) a czy można jakoś go wsadzić na widget w dowolnym miejscu? Chciałbym, aby był szerokości widgetu na jaki go umieszczam (czyli rozumiem, parent np. mondayWidget i jego szerokosc) a w pionie żeby był osadzony biorąc pod uwagę czas rozpoczęcia wydarzenia i jego zakończenia, czyli dzieliłbym wysokosc widgetu na liczbę przedziałów czasowych i osadzał na widgecie zgodnie z jakąś pozycją y (pionową). Dobrze to rozumiem? I jak ustawić to w takiej pozycji? Chodzi mi głownie o pion.
-
Przy widgetach są 2 możliwości: albo korzystasz z "twardych" współrzędnych, czli podajesz sam x, y, wysokość i szerokość, albo używasz layoutów, które robią to wszystko za ciebie, automatycznie. Polecam z nimi trochę poeksperymentować, w Qt Creatorze jest do GUI edytor graficzny i można całkiem sporo zrobić nie pisząc wiele kodu.
Akurat w twoim przypadku layouty słabo się nadadzą, taki specyficzny use case ;-) Widzę tu kilka rozwiązań, nie jestem pewien, które doradzić. Ustawianie widgetu samemu bez layoutów jest trudne, orobisz się strasznie i będzie w tym pełno błędów. Inna opcja to zaimplementować własne rysowanie w widgetcie, albo przynajmniej samemu napisać funckję sizeHint() tak, żeby widget miał dokładnie takie wymiary, jakie cię interesują. Z innych opcji jest jeszcze język QML i moduł QtQuick, ale to całkiem inna para kaloszy (bardzo łatwa, ale całkiem inna ;)).
-
Trochę już poznałem QML, stworzyłem sobie z pomocą tego języka GUI, które chciałem mieć. Utworzyłem również klasę Wydarzenie dziedziczącą po QObject oraz stworzyłem wydarzenie.qml, będące takim małym "widgecikiem", który chciałbym dodawać na istniejące już gui. Nadal nie wiem w jaki sposob połaczyć QML z c++ w ten sposób, żeby po wcisnieciu buttona utworzyc instancje obiektu klasy Wydarzenie i jednoczesnie dodac odpowiedni "Rectangle" do tegoż GUI? Jeżeli ktoś mógłby mi pomóc to chętnie wkleje gdzieś ten kod w celu czytelniejszego rozpoznania problemu.
-
a może utwórz wydarzenie i je schowaj a na kliknięcie przycisku je pokaż.
-
niestety, ale chciałbym żeby to uzytkownik mógł dodawac wydarzenia z konkretnym przedziałem czasowym, miejscem i nazwą.
-
to chyba musisz użyć jakąś ListView i napychać go tylko danymi (modelem). tu masz przykład: http://kunalmaemo.blogspot.com/2011/03/creating-custom-listview-delegate-in.html