Jak sprawić, by Widget Qt powiększał się wraz z rozmiarem okna?

89

Chcę mieć mały, QFormLayoutktóry rośnie, aby wypełnić widżet nadrzędny.

Utworzyłem nowy plik .ui przy użyciu QWidgetszablonu w Qt Designer. Umieściłem QFormLayoutwewnątrz tego „okna”, a następnie umieściłem w nim kontrolki QFormLayout.

To wszystko działa dość dobrze, ale QFormLayoutzawsze pozostaje w rozmiarze, który ustawiłem w Qt Designer. Chciałbym, QFormLayoutaby wypełnił swój widget nadrzędny i urósł / zmniejszył się wraz z nim.

Jak mogę to osiągnąć?

bastibe
źródło

Odpowiedzi:

130

W programie Designer aktywuj centralWidget i przypisz układ, np. Układ poziomy lub pionowy. Następnie QFormLayout automatycznie zmieni rozmiar.

Obraz projektanta

Zawsze upewnij się, że wszystkie widżety mają układ! W przeciwnym razie automatyczna zmiana rozmiaru zepsuje się z tym widżetem!

Zobacz też

Kontrolki nalegają na to, aby były zbyt duże i nie zmieniają rozmiaru w QtDesigner

Jens
źródło
13
QtDesigner może być czasami nieco zagmatwany.
bastibe
30
och, dzięki za to! :-) Wpatruję się w QtDesigner (no cóż, QtCreator, to samo) przez pół godziny i nie mogłem zrozumieć, dlaczego mój centralny widżet nie zmienia rozmiaru na maksa - dopóki nie zauważyłem małej małej ikony zakreślone w Twojej odpowiedzi ma nad nim czerwony znak „wyłączone”. jedno kliknięcie przycisku „ułóż w pionie” na pasku narzędzi kreatora i problem zostanie naprawiony. Pierwszy raz zauważyłem ten pasek narzędzi BTW, łatwo przeoczyć ...
ssc
8
Aby skomentować odpowiedź Jensa: Na komputerze Mac kliknij widget najwyższego poziomu (niekoniecznie nazwany „centralWidget”), a następnie kliknij „Formularz” na pasku menu i wybierz jeden z układów.
hnasarat
2
Jeśli ktoś nadal się zastanawia, można to zrobić w systemie Windows w QT5.8 / QT Creator 4.2.1, klikając „centralWidget” najwyższego poziomu (który ma mały czerwony znak), a następnie przechodząc do Narzędzia> Edytor formularzy> Układ W pionie (lub w poziomie).
LeoR
41

Okazało się, że niemożliwe było przypisanie układu do centralnego widgetu, dopóki nie dodałem pod nim co najmniej jednego dziecka. Następnie mógłbym podświetlić malutką ikonę czerwonym znakiem „wyłączone”, a następnie kliknąć układ na pasku narzędzi Projektanta u góry.

Jillian Beuschel Marohnic
źródło
4
To jest szalone. Przypisanie układu do centralnego widżetu powinno być najbardziej banalną operacją w Qt Creator. Zamiast robić to wymaga łączenia tej wysoce nieintuicyjne rozwiązanie Jens ' rozwiązanie jednakowo nieintuicyjne ( w tym takiej kolejności ). Podczas gdy automatyzacja zapewniana przez Qt Creator wciąż przewyższa powtarzalne schematy z szerokim marginesem, hakowanie wokół jego przerażającego doświadczenia użytkownika (UX) dało mi nowy dreszcz oczu.
Cecil Curry
@Cecil Curry nawet po tym rozwiązaniu zajęło mi 20 minut, zanim zdałem sobie sprawę, co powinienem ... ponieważ centralWidget tylko w przypadku, gdy nie ma opcji menu kontekstowego, aby dodać układ ... tylko mikroskopijny przycisk na pasku narzędzi, który wygląda prawie jak nieaktywny
Swift - Friday Pie
3
Pisząc ten komentarz, ponieważ nawet po rozwiązaniach tutaj, miałem problem ze znalezieniem opcji. Musisz wybrać centralny widget, a następnie kliknąć prawym przyciskiem myszy wolne miejsce w aplikacji, przejść do `` Układu '' w menu kontekstowym, które zostało otwarte, a następnie wybrać żądany układ. To przynajmniej działało dla mnie (QT5, używając QT Designer 5.11.1).
kushy
11

Przyjęta odpowiedź (jej obraz) jest błędna, przynajmniej teraz w QT5. Zamiast tego należy przypisać układ do obiektu / widgetu głównego (wskazując na wyżej wymieniony obraz, powinien to być MainWindowzamiast centralWidget). Zauważ również, że musisz mieć co najmniej jeden QObjectutworzony pod nim, aby to zadziałało. Zrób to, a Twój interfejs użytkownika będzie reagował na zmianę rozmiaru okna.

Nikos
źródło
0

Musisz zmienić domyślny typ układu obiektu QWidget najwyższego poziomu z typu Przerwij na inne typy układu (Układ pionowy, Układ poziomy, Układ siatki, Układ formularza). Na przykład: wprowadź opis obrazu tutaj

Do czegoś takiego:

wprowadź opis obrazu tutaj

Linh Dao
źródło