Wie kann ein Qt-Widget mit der Fenstergröße wachsen?

87

Ich möchte ein kleines QFormLayout, das wächst, um sein übergeordnetes Widget zu füllen.

Ich habe eine neue .ui- Datei mit der QWidgetVorlage in Qt Designer erstellt. Ich habe ein QFormLayoutFenster in dieses 'Fenster' eingefügt und dann einige Steuerelemente darin eingefügt QFormLayout.

Dies alles funktioniert einigermaßen gut, aber das QFormLayoutbleibt immer bei der Größe, die ich in Qt Designer festgelegt habe. Ich möchte, dass das QFormLayoutübergeordnete Widget füllt und damit wächst / schrumpft.

Wie kann ich das erreichen?

Bastibe
quelle

Antworten:

128

Aktivieren Sie in Designer das centralWidget und weisen Sie ein Layout zu, z. B. ein horizontales oder vertikales Layout. Dann wird die Größe Ihres QFormLayout automatisch geändert.

Bild des Designers

Stellen Sie immer sicher, dass alle Widgets ein Layout haben! Andernfalls wird die automatische Größenänderung mit diesem Widget unterbrochen!

Siehe auch

Die Steuerelemente bestehen darauf, in QtDesigner zu groß zu sein und die Größe nicht zu ändern

Jens
quelle
13
QtDesigner kann manchmal etwas verwirrend sein.
Bastibe
29
Oh, DANKE dafür! :-) Ich habe QtDesigner (nun ja, QtCreator, das Gleiche dort) eine halbe Stunde lang angestarrt und konnte nicht herausfinden, warum mein zentrales Widget nicht die maximale Größe ändert - bis ich das winzige kleine Symbol entdeckte, das Sie haben In Ihrer Antwort eingekreist ist eine rote Markierung "Deaktiviert". Ein Klick auf die Schaltfläche "Vertikal anordnen" in der Ersteller-Symbolleiste und das Problem ist behoben. Zum ersten Mal
bemerke
7
So kommentieren Sie die Antwort von Jens: Klicken Sie auf dem Mac auf das Widget der obersten Ebene (nicht unbedingt "centralWidget" genannt), klicken Sie dann in der Menüleiste auf "Formular" und wählen Sie eines der Layouts aus.
Hnasarat
2
Wenn sich noch jemand wundert, geschieht dies unter Windows in QT5.8 / QT Creator 4.2.1, indem Sie auf die oberste Ebene "centralWidget" (mit einer kleinen roten Markierung) klicken und dann zu Extras> Formulareditor> Layout gehen Vertikal (oder horizontal).
LeoR
41

Ich fand es unmöglich, dem zentralen Widget ein Layout zuzuweisen, bis ich mindestens ein Kind darunter hinzugefügt hatte. Dann könnte ich das winzige Symbol mit der roten Markierung "Deaktiviert" markieren und dann oben in der Designer-Symbolleiste auf ein Layout klicken.

Jillian Beuschel Marohnic
quelle
4
Das ist ja zum verrückt werden. Das Zuweisen eines Layouts zum zentralen Widget sollte die einfachste Operation in Qt Creator sein. Stattdessen muss diese höchst unintuitive Lösung mit der ebenso unintuitiven Lösung von Jens ( in genau dieser Reihenfolge ) kombiniert werden . Während die von Qt Creator bereitgestellte Automatisierung das sich wiederholende Boilerplate immer noch um ein Vielfaches übertrifft, hat mich das Hacken seiner entsetzlichen Benutzererfahrung (UX) zu einem neuen Augenzwinkern gebracht.
Cecil Curry
@ Cecil Curry Selbst nach dieser Lösung habe ich 20 Minuten gebraucht, um zu erkennen, was ich tun sollte ... weil centralWidget nur dann, wenn es keine Kontextmenüoption zum Hinzufügen eines Layouts gibt ... nur eine mikriskopische Schaltfläche in der Symbolleiste, die fast wie eine inaktive aussieht
Swift - Friday Pie
3
Ich habe diesen Kommentar geschrieben, da ich auch nach den Lösungen hier Probleme hatte, die Option zu finden. Sie müssen das centralWidget auswählen, dann mit der rechten Maustaste in einen freien Bereich Ihrer App klicken, im geöffneten Kontextmenü zu 'Layout' gehen und dann das gewünschte Layout auswählen. Dies funktionierte zumindest bei mir (QT5 mit QT Designer 5.11.1).
Kushy
9

Die akzeptierte Antwort (ihr Bild) ist falsch, zumindest jetzt in QT5. Stattdessen sollten Sie dem Stammobjekt / Widget ein Layout zuweisen (indem Sie auf das oben genannte Bild zeigen, sollte es das MainWindowstatt sein centralWidget). Beachten Sie auch, dass mindestens eine QObjectDatei darunter erstellt sein muss, damit dies funktioniert. Wenn Sie dies tun, reagiert Ihre Benutzeroberfläche auf die Größenänderung des Fensters.

Nikos
quelle
0

Sie müssen den Standardlayouttyp des QWidget-Objekts der obersten Ebene vom Typ "Layout unterbrechen" in andere Layouttypen ändern (vertikales Layout, horizontales Layout, Rasterlayout, Formularlayout). Beispielsweise: Geben Sie hier die Bildbeschreibung ein

Zu so etwas:

Geben Sie hier die Bildbeschreibung ein

Linh Dao
quelle