Podczas układania GUI w Qt umieszczenie każdego widgetu w odpowiednim miejscu na formularzu może być dość trudnym zadaniem. Na szczęście, Qt oferuje zestaw menedżerów układu, które upraszczają proces pozycjonowania widżetów i pozwalają łatwo tworzyć dowolne układy. Aby rozłożyć widżet w formularzu, możesz stworzyć wszystko w kodzie, lub możesz stworzyć swój układ za pomocą Qt Designer. W tym poradniku dowiesz się, jak używać układów Qt za pomocą Qt Designera do budowania złożonych GUI dla swoich aplikacji.
Dodatkowo, stworzymy przykład okna dialogowego, używając kilku widżetów ze spójnym układem, aby wzmocnić twoją wiedzę i złożyć wszystko razem w pełni funkcjonalne okno dialogowe, tak jak byś tworzył w prawdziwej aplikacji.
Używanie układów za pomocą Qt Designer
Qt Designer jest narzędziem Qt do projektowania i tworzenia graficznych interfejsów użytkownika (GUI) dla aplikacji desktopowych. Za pomocą Qt Designer można tworzyć okna, okna dialogowe i formularze. Pozwala na dodawanie różnego rodzaju widżetów do tworzenia GUI przy użyciu formularzy ekranowych i interfejsu opartego na przeciąganiu i upuszczaniu.
Główny interfejs Qt Designer wygląda następująco –
Qt Designer – Główny interfejs
Qt Designer posiada przejrzysty i przyjazny dla użytkownika interfejs, który pozwala na tworzenie dowolnego rodzaju GUI poprzez przeciąganie widżetów na pustą formę. Po umieszczeniu wszystkich widżetów na formularzu, musisz umieścić je w spójnym układzie. Zapewni to, że wszystkie twoje widżety będą wyświetlane i zmienią rozmiar prawidłowo, gdy formularz będzie wyświetlany w podglądzie lub używany w aplikacji.
Menedżery układu Qt są strukturalnymi kontenerami, które automatycznie układają widżety dzieci, zapewniając, że dobrze wykorzystują dostępną przestrzeń. Umieszczanie widżetów w menedżerze układu automatycznie układa je zgodnie ze zdefiniowanymi zasadami. Jedną z najbardziej użytecznych funkcji Qt Designer jest możliwość przeciągania i upuszczania hierarchii menedżerów układu, aby ułożyć widżety w czyste i funkcjonalne interfejsy.
W Qt Designerze można tworzyć obiekty układu przez zastosowanie układu do grupy istniejących widżetów. Chociaż możliwe jest przeciąganie układów na formularz, a następnie przeciąganie widżetów do układów, może to być nieco kłopotliwe. Najlepszą praktyką jest zamiast tego przeciągnięcie wszystkich potrzebnych widżetów i przekładek na formularz, a następnie wybranie powiązanych widżetów i przekładek i zastosowanie do nich układów. Wykonaj następujące kroki –
- Przeciągnij i upuść widżety na formularz, starając się umieścić je w pobliżu ich pożądanej pozycji
- Wybierz widżety, które powinny być zarządzane z danym układem, przytrzymując klawisz
Ctrl
i klikając je - Zastosuj odpowiedni układ (poziomy, pionowy, siatka lub formularz) za pomocą paska narzędzi Qt Designer, menu głównego, lub menu kontekstowego formularza
Zanim przejdziesz do przykładu, spójrz na opcje związane z układem, które oferuje Qt Designer –
- Użyj opcji układu na głównym pasku narzędzi
- Użyj opcji układu w menu głównym
- Użyj opcji układu w menu kontekstowym formularza
Najbardziej dostępnym sposobem tworzenia układów jest użycie sekcji układu głównego paska narzędzi Qt Designer. Sekcja ta wygląda następująco –
Qt Designer – pasek narzędzi Układ
Od lewej do prawej znajdują się następujące przyciski –
- Rozmieść poziomo układa wybrane widżety w układzie poziomym obok siebie (kombinacja klawiszy,
Ctrl+1
). Ta opcja wykorzystuje standardowy obiektQHBoxLayout
- Lay Out Vertically Układa wybrane widżety w układzie pionowym, jeden pod drugim (kombinacja klawiszy,
Ctrl+2
). Ta opcja używa standardowegoQVBoxLayout
obiektu - Rozmieść poziomo w rozgałęziaczu Rozmieszcza widżety poziomo za pomocą rozgałęziacza (kombinacja klawiszy,
Ctrl+3
) - Rozmieść pionowo w rozgałęziaczu Rozmieszcza widżety pionowo za pomocą rozgałęziacza (kombinacja klawiszy,
Ctrl+4
) - Rozmieść w siatce Rozmieszcza widżety w siatce podobnej do tabeli (wiersze i kolumny). Domyślnie każdy widżet zajmuje jedną komórkę siatki, ale można zmodyfikować to zachowanie i sprawić, aby widżety zajmowały kilka komórek (Kombinacja klawiszy,
Ctrl+5
). Ta opcja wykorzystuje standardowyQGridLayout
obiekt - Rozmieść w układzie formularza Rozmieszcza wybrane widżety w układzie dwukolumnowym. Lewa kolumna jest zwykle przeznaczona na etykiety z prośbą o podanie pewnych informacji, a prawa kolumna zawiera widżety do wprowadzania, edytowania lub pokazywania tych informacji (kombinacja klawiszy,
Ctrl+6
) - Przerwij układ Ten klawisz pozwala przerwać istniejący układ. Po ułożeniu widżetów w układzie nie można ich przesuwać ani zmieniać ich rozmiaru indywidualnie, ponieważ ich geometria jest kontrolowana przez układ. Aby zmodyfikować poszczególne widżety, trzeba przerwać układ i powtórzyć go później (kombinacja klawiszy
Ctrl+0
) - Dostosuj rozmiar dostosowuje rozmiar układu, aby pomieścić zawarte widżety i zapewnić, że każdy z nich ma wystarczająco dużo miejsca, aby być widocznym (kombinacja klawiszy
Ctrl+J
)
Te same opcje związane z układem są również dostępne w menu głównym Qt Designer w menu Form
oraz w menu kontekstowym formularza, więc możesz wybrać te, które bardziej Ci się podobają.
Jak już mamy teorię za sobą, możemy zastosować te układy w praktyce. W następnych kilku sekcjach będziemy używać Qt Designera do rozmieszczania widżetów na naszych formularzach i budowania ładnych i eleganckich GUI dla aplikacji desktopowych. Ale zanim zaczniemy eksperymentować z różnymi menedżerami układów, jakie oferuje Qt, najpierw stworzymy niestandardowy widżet do wizualizacji układów, gdy będziemy przechodzić przez ten samouczek.
Ukończony plik .ui można pobrać poniżej, jeśli chcesz pominąć ten krok.
layout-labels.ui
Naprzód i odpal swój Qt Designer, a następnie wykonaj następujące kroki –
- Wybierz
Widget
wtemplates/forms
zakładceNew Form
okna dialogowego. Spowoduje to utworzenie nowego pustego formularza do pracy. - Zapisz swój formularz jako
layout-labels.ui
. - Wyszukaj widżet Label na karcie
Widget Box
i przeciągnij go na formularz. - Przejdź do karty
Property Editor
i ustaw właściwośćtext
na0
. - Otwórz okno dialogowe
Text Edit
i ustaw kolor tekstu na biały. Ustaw rozmiar czcionki na20
punktów i wyjustuj tekst. Naciśnij klawiszOK
, aby zastosować zmiany. - Przejdź do okna
Property Editor
i ustaw właściwośćautoFillBackground
naTrue
, zaznaczając pole wyboru. - Wyszukaj właściwość
palette
i otwórz okno dialogoweEdit Palette
. Użyj opcjiQuick
, aby ustawić kolor na czerwony.
Jeśli czujesz się zagubiony, spójrz na poniższy screencast, aby zobaczyć kroki w akcji –
W tym przykładzie tworzysz nowe okno na podstawie szablonu Widget
. Następnie dodajemy etykietę, ustawiamy jej właściwość text
na 0
i ustawiamy jej kolor tła na czerwony.
Aby zakończyć ten przykład, powtórz wszystkie kroki, aby dodać trzy kolejne etykiety z ich tekstem ustawionym na 1
, 2
i 3
i ich kolorami ustawionymi na zielony, żółty i niebieski. W końcu otrzymasz formularz taki jak ten:
Qt Designer – Formularz z kolorowymi etykietami
Powyższy zrzut ekranu pokazuje początkowy formularz, którego będziesz używał w kilku następnych sekcjach. Jest to czysty formularz z czterema obiektami etykiet na nim. Możesz ustawić kolor tła dla każdej etykiety, aby łatwiej było je zobaczyć i rozróżnić w następnych sekcjach.
Układy poziome, QHBoxLayout
Możesz użyć menedżera układów poziomych (QHBoxLayout), aby ułożyć widżety w jednym rzędzie. Aby utworzyć taki układ w kodzie, musisz zainicjować klasę QHBoxLayout
, a następnie dodać swoje widżety do obiektu układu. W Qt Designerze łatwiej jest pracować w odwrotny sposób.
Z otwartym plikiem layout-labels.ui
najpierw zaznacz wszystkie swoje etykiety. Aby to zrobić, możesz kliknąć każdy widżet po kolei, trzymając klawisz Ctrl
lub możesz również kliknąć i przeciągnąć wskaźnikiem myszy wewnątrz formularza, aby wybrać widżety.
Po zaznaczeniu widżetów umieść je w układzie poziomym, wybierając przycisk Lay Out Horizontally
na głównym pasku narzędzi Qt Designer. Możesz również użyć opcji Lay out->Lay Out Horizontally
z menu kontekstowego pokazanego poniżej lub możesz nacisnąć Ctrl+1
. Poniższy screencast poprowadzi Cię przez te kroki –
Jeśli układ jest zły, możesz łatwo cofnąć wszystko i zacząć układać od nowa. Aby cofnąć wszystko, możesz nacisnąć Ctrl+z
lub użyć menu Edit
z głównego menubaru Qt Designera. Jeśli to nie jest możliwe lub nie działa, możesz po prostu przerwać układ, używając przycisku Break Layout
z głównego paska narzędzi Qt Designera. Innym sposobem na przerwanie układu jest naciśnięcie klawisza Ctrl+0
lub wybranie Break Layout
z menu kontekstowego formularza.
Układy pionowe, QVBoxLayout
Możesz użyć układu pionowego (QVBoxLayout), aby ułożyć widżety w jednej kolumnie jeden nad drugim. Może to być bardzo przydatne, gdy tworzysz grupy widżetów i musisz się upewnić, że są one wyrównane w pionie.
Zaczynając od oryginalnego pliku layout-labels.ui
, pierwszym krokiem będzie wybranie widżetów, które musisz uwzględnić w układzie pionowym. Następnie możesz kliknąć przycisk Lay Out Vertically
na głównym pasku narzędzi, możesz użyć menu kontekstowego lub możesz również nacisnąć klawisz Ctrl+2
. Poniższy screencast poprowadzi Cię przez te kroki –
Jeśli przyjrzysz się uważnie screencastowi, to zobaczysz, że obiekt układu jest oznaczony cienką czerwoną ramką otaczającą etykiety na formularzu. Ta czerwona ramka nie jest widoczna na podglądzie lub w czasie działania, jest to tylko wskazówka, której możesz użyć podczas projektowania formularza. Zauważ również, że obiekt układu pojawia się w Inspektorze obiektów, a jego właściwości (marginesy i ograniczenia) są wyświetlane w Edytorze właściwości.
Układy siatki, QGridLayout
Czasami trzeba układać widżety zarówno poziomo, jak i pionowo w ramach tego samego układu. Aby to zrobić, możesz użyć menedżera układu siatki (QGridLayout). Menedżery układu siatki układają widżety w kwadratową lub prostokątną siatkę, w której wszystkie widżety są wyrównane w pionie i poziomie względem swoich sąsiadów. Ten rodzaj układu może dać Ci znacznie więcej swobody w rozmieszczaniu widżetów na formularzu, zachowując jednocześnie pewien stopień struktury. Ten układ może być bardziej odpowiedni niż zagnieżdżone układy poziome i pionowe, zwłaszcza gdy zależy Ci na wyrównaniu sąsiednich wierszy lub kolumn.
Układ siatki możesz zbudować za pomocą Qt Designera w taki sam sposób jak inne układy. Pierwszym krokiem jest wybranie grupy widżetów, które chcesz ułożyć za pomocą menedżera układu siatki. Następnie można użyć paska narzędzi, menu kontekstowego lub nacisnąć klawisz Ctrl+5
, aby ustawić układ. Obejrzyj poniższy screencast –
W tym przypadku używamy układu siatki 2 x 2 do rozmieszczenia etykiet na formularzu. Zauważ, że aby użyć tego rodzaju układu, powinieneś najpierw umieścić widżety w rzędach i kolumnach na formularzu, jak pokazano na powyższym screencast. Qt Designer jest całkiem sprytny i postara się utrzymać projekt tak podobny, jak to tylko możliwe, do tego, co zostało stworzone ręcznie. Może nawet automatycznie tworzyć trudne układy wielokolumnowe lub automatycznie wypełniać puste komórki.
Układy formularzy, QFormLayout
Mimo że QGridLayout
może być użyty do układu formularzy z wejściami i etykietami w dwóch kolumnach, Qt dostarcza również układ zaprojektowany specjalnie do tego celu – (QFormLayout). Ten typ układu jest idealny, gdy tworzysz ustrukturyzowaną aplikację wprowadzającą dane lub bazę danych. Lewa kolumna zwykle zawiera etykiety, które proszą o podanie pewnych informacji. Prawa kolumna zawiera widżety wejściowe, takie jak edytory linii (QLineEdit), pola obrotowe (QSpinBox), edytory daty (QDateEdit), pola kombi (QComboBox), i tak dalej.
Zaletą użycia tego układu w stosunku do QGridLayout jest to, że jest on prostszy do pracy, gdy potrzebujesz tylko dwóch kolumn. Poniższy screencast pokazuje to w akcji –
W tym przykładzie, najpierw dodajemy cztery nowe etykiety. Etykiety te będą zawierały informacje o danych, które mają być wprowadzone lub edytowane w drugiej kolumnie. W tym przypadku druga kolumna zawiera twoje kolorowe etykiety testowe, ale zazwyczaj ta kolumna będzie używana do umieszczania widżetów wejściowych, takich jak edytory wierszy, pola obrotowe, pola kombi i tak dalej.
Układy dzielników
Rozdzielacze są obiektami kontenerowymi, które układają widżety poziomo lub pionowo w dwóch panelach o zmiennym rozmiarze. Z tym rodzajem układu, możesz dowolnie dostosować ilość miejsca, które każdy z paneli zajmuje na twojej formie, utrzymując jednocześnie stałą całkowitą ilość wykorzystanego miejsca. W Qt układy splitterów są zarządzane za pomocą QSplitter.
Mimo że splittery są technicznie widżetem kontenera (a nie układem), Qt Designer traktuje je jako układy, które można zastosować do istniejących widżetów. Aby umieścić grupę widżetów w dzielniku, najpierw wybieramy je jako zwykłe, a następnie stosujemy dzielnik za pomocą odpowiedniego przycisku paska narzędzi, skrótu klawiaturowego lub opcji menu kontekstowego w Qt Designer Spójrz na poniższy screencast –
W tym przykładzie, najpierw stosujemy poziomy dzielnik do etykiet. Zauważ, że musisz uruchomić podgląd formularza, jeśli chcesz zobaczyć podział w akcji. Możesz uruchomić podgląd formularza, naciskając klawisz Ctrl+R
. Później zastosujemy pionowy splitter do etykiet. W każdym przypadku możesz dowolnie zmieniać rozmiar widżetu za pomocą wskaźnika myszy.
Buduj inne układy za pomocą Qt Designera
Jest jeszcze kilka rzeczy, które możesz zrobić z układami w Qt Designerze. Na przykład, załóżmy, że musisz dodać nowy widżet do istniejącego układu lub użyć zagnieżdżonych układów, aby ułożyć widżety w złożonym GUI. W następnych kilku sekcjach omówimy, jak wykonać niektóre z tych zadań.
Wstawianie obiektów do istniejącego układu
Obiekty mogą być wstawiane do istniejącego układu przez przeciągnięcie ich z bieżących pozycji i upuszczenie w wymaganym miejscu w układzie. Niebieski kursor jest wyświetlany w układzie, gdy obiekt jest nad nim przeciągany, aby wskazać miejsce, w którym zostanie umieszczony.
Spójrz na poniższy screencast, gdzie umieściliśmy trzy z naszych etykiet w pionowym układzie, a następnie zdaliśmy sobie sprawę, że niebieska etykieta została pominięta w grze –
Możliwe jest również przeniesienie lub zmiana pozycji danego widżetu w układzie. Aby to zrobić, po prostu przeciągnij i upuść widżet na jego nową pozycję w układzie. Pamiętaj, aby podążać za niebieską linią, aby uzyskać to poprawnie.
Zagnieżdżanie układów w celu zbudowania złożonych GUI
Możesz również zagnieżdżać menedżery układów jeden w drugim za pomocą Qt Designer. Wewnętrzny układ staje się wtedy dzieckiem otaczającego go układu. W ten sposób można iteracyjnie tworzyć bardzo złożone, ale dobrze zorganizowane interfejsy użytkownika.
Wykłady mogą być zagnieżdżane tak głęboko, jak tylko potrzebujesz. Na przykład, aby utworzyć okno dialogowe z poziomym rzędem przycisków na dole i kilkoma innymi widżetami ustawionymi pionowo na formularzu, możesz użyć poziomego układu dla przycisków i pionowego dla reszty widżetów, a następnie zawinąć te układy w układ pionowy.
Wracając do naszego przykładu z kolorowymi etykietami, poniższy screencast pokazuje proces układania zagnieżdżonego układu w Qt Designer –
W tym przykładzie najpierw układamy widżety w pary, używając układu poziomego. Następnie zagnieżdżamy oba te układy w trzecim układzie, ale tym razem pionowym. Układy można zagnieżdżać tak głęboko, jak jest to wymagane.
Po wybraniu układu dziecka można wybrać jego układ rodzica, naciskając klawisz Shift
podczas klikania na nim. Pozwala to na szybkie wybranie określonego układu w hierarchii, co w przeciwnym razie będzie trudne ze względu na małą ramkę ograniczającą każdy menedżer układów.
Ustawianie układu najwyższego poziomu lub głównego
Ostatnim krokiem, który należy wykonać podczas budowania formularza, jest połączenie wszystkich układów i widżetów w jeden układ główny lub układ najwyższego poziomu. Ten układ jest na szczycie hierarchii wszystkich innych układów i widżetów. Ważne jest, aby mieć układ, ponieważ w przeciwnym razie widżety na formularzu nie zmienią rozmiaru, gdy zmienisz rozmiar okna.
Aby ustawić główny układ, po prostu kliknij prawym przyciskiem myszy w dowolnym miejscu formularza, który nie zawiera widżetu lub układu. Następnie możesz wybrać Lay Out Horizontally
, lub Lay Out Horizontally
, lub możesz również wybrać Lay Out in a Grid
jak w poniższym screencast –
W tym przykładzie, używamy każdego z trzech różnych układów jako naszego układu najwyższego poziomu po kolei. Najpierw używamy układu poziomego, następnie łamiemy układ i używamy układu pionowego. Na koniec ustawiamy układ siatki. To, który układ najwyższego poziomu wybierzesz, zależy od konkretnych wymagań Twojej aplikacji.
Ważne jest, abyś zwrócił uwagę na to, że układy najwyższego poziomu nie są widoczne jako osobny obiekt w Inspektorze obiektów. Jego właściwości pojawiają się pod właściwościami widżetów głównego formularza. Zauważ również, że jeśli Twój formularz nie posiada layoutu, to jego ikona pojawi się w Object Inspector w postaci czerwonego kółka. Innym sposobem na sprawdzenie, czy poprawnie ustawiłeś główny układ, jest próba zmiany rozmiaru formularza, jeśli główny układ jest na miejscu, wtedy twoje widżety powinny zmienić rozmiar odpowiednio.
Jak zaczniesz budować bardziej złożone aplikacje, odkryjesz, że inne widżety kontenera również wymagają ustawienia układu najwyższego poziomu, na przykład QGroupBox, QTabWidget, QToolBox, i tak dalej. Aby to zrobić, możesz wykonać te same kroki, które widziałeś tutaj, ale tym razem musisz kliknąć prawym przyciskiem myszy na widżecie kontenera.
Układanie dialogu z Qt Designer
Dla ostatniego i bardziej kompletnego przykładu, jak używać układów z Qt Designer, stworzymy teraz okno dialogowe, aby wprowadzić pewne informacje w aplikacji bazy danych. Załóżmy, że budujemy oprogramowanie do zarządzania zasobami ludzkimi dla naszej firmy Poyqote Inc. Pracujemy teraz nad formularzem wprowadzającym pewne dane o naszych pracownikach. Okno dialogowe powinno prezentować użytkownikom przyjazny interfejs GUI do wprowadzania następujących danych:
- Nazwa pracownika
- Data zatrudnienia
- Dział
- Posada
- Wynagrodzenie roczne
- Opis stanowiska
Jaki jest najlepszy sposób ułożenia tego formularza? Istnieje wiele opcji i jest to w dużej mierze kwestia gustu i praktyki. Ale tutaj używamy QFormLayout
, aby ułożyć pola wejściowe w dwóch kolumnach z etykietami po lewej stronie i polami wejściowymi po prawej. Proces tworzenia układu jest pokazany na poniższym screencast –
Podstawowe okno dialogowe jest tworzone przy użyciu szablonu Qt Designer’s Dialog with Buttons Bottom. Następnie dodajemy kilka etykiet i kilka widżetów wejściowych, w tym edycje linii, edycje daty, edycje tekstu i pola kombi. Następnie umieszczamy wszystkie te widżety w układzie formularza, a na koniec definiujemy górny poziom lub główny układ formularza.
Plik .ui gotowego okna dialogowego można pobrać tutaj.
Wnioski
Qt Designer jest potężnym narzędziem, jeśli chodzi o tworzenie GUI przy użyciu Qt. Jedną z jego najprostszych i najbardziej użytecznych funkcji jest możliwość układania widżetów w różnego rodzaju układy. Nauka efektywnego tworzenia układów za pomocą Qt Designera może podnieść Twoją produktywność, szczególnie podczas tworzenia złożonych GUI.
Ten poradnik przeprowadzi Cię przez proces tworzenia własnych układów za pomocą Qt Designera. Teraz już wiesz, jak w pełni wykorzystać możliwości Qt Designera podczas tworzenia układów graficznych.