Automatisch expandierendes Layout mit Qt-Designer


217

Ich benutze den Qt Designer.

Ich möchte eine erstellen, QVBoxLayoutdie automatisch erweitert wird, um das gesamte Fenster auszufüllen.

Das Layout der QVBoxLayoutbleibt fest.

Wie kann ich veranlassen QVBoxLayout, dass das gesamte Fenster durch den Designer erweitert und gefüllt wird?


Wenn Sie nur das Layout in Qt Designer verwenden möchten, lesen Sie bitte die folgenden Tipps: stackoverflow.com/questions/1508939/qt-layout-on-qmainwindow

Antworten:


366

QVBoxLayoutKlicken Sie nach dem Erstellen Ihres in Qt Designer mit der rechten Maustaste auf den Hintergrund Ihres Widgets / Dialogs / Fensters (nicht das QVBoxLayout, sondern das übergeordnete Widget) und wählen Sie im unteren Bereich des Kontextmenüs Layout -> Layout in einem Raster . Das QVBoxLayoutsollte sich jetzt dehnen, um es an das Fenster anzupassen, und die Größe wird automatisch geändert, wenn die Größe des gesamten Fensters geändert wird.


6
Vielen Dank, ich habe auch nach einer Lösung für dieses Problem gesucht.
Simon H.

35
Tatsächlich müssen Sie das Rasterlayout überhaupt nicht erstellen. Deaktivieren Sie alle Elemente und klicken Sie auf den Hintergrund des Widgets, anstatt selbst ein QVBoxLayout zu erstellen. Wählen Sie dann Layout -> Vertikal auslegen.
Michal Kottman

3
@ Michael Kottman: Das funktioniert nur zur Entwurfszeit. Das Layout wird nicht geändert, wenn der Benutzer die Größe des Fensters zur Laufzeit ändert.
Jay

5
Sowohl das Raster als auch das vertikale Layout funktionieren für mich bei Design und Laufzeit.
AndiDog

2
Ich möchte ein kleines Detail hinzufügen: Wenn Sie einer QTabWidget-Seite ein selbstdehnendes Layout hinzufügen möchten , können Sie nicht mit der rechten Maustaste auf den Hintergrund der Seite klicken, da Sie das QTabWidget und nicht die entsprechende Registerkarte auswählen würden. Sie müssen die rechte Maustaste auf dem Etikett Registerkarte wie im Designer - Fenstern angezeigt, und wählen Sie dann Lay Out -> Lay Out in einem Grid
Emanuele Cipolla

15

Gemäß der Dokumentation muss ein Layoutsatz der obersten Ebene vorhanden sein.

Ein Layout der obersten Ebene ist erforderlich, um sicherzustellen, dass die Größe Ihrer Widgets beim Ändern der Fenstergröße korrekt geändert wird. Um zu überprüfen, ob Sie ein Layout der obersten Ebene festgelegt haben, zeigen Sie eine Vorschau Ihres Widgets an und versuchen Sie, die Größe des Fensters durch Ziehen des Größengriffs zu ändern.

Sie können eine festlegen, indem Sie die Auswahl aufheben, mit der rechten Maustaste auf das Formular selbst klicken und eines der im Kontextmenü verfügbaren Layouts auswählen.

Qt Layouts


2

Ich habe versucht, eine "fit to screen" -Eigenschaft zu finden, aber es gibt keine solche.

Wenn Sie jedoch die "maximale Größe" des Widgets auf eine "große Zahl" (wie 2000 x 2000) setzen, wird das Widget automatisch an den übergeordneten Widget-Bereich angepasst.


6
Was passiert mit dieser Technik auf einem MacBook Pro mit Retina-Display (2880 x 1800)?
ta.speot.is

1
Stellen Sie einfach die maximale Anzahl ein, die akzeptiert wird (der Designer zeigt mir 16777215 an), und es sollte auf jeder Monitorgröße funktionieren.
Andre

0

Wenn Sie Ihr Layout mit mindestens einem Widget hinzugefügt haben, wählen Sie Ihr Fenster aus und klicken Sie auf die Schaltfläche "Aktualisieren" von QtDesigner. Die Größe der Benutzeroberfläche wird auf die optimalste Größe angepasst und Ihr Layout passt in das gesamte Fenster. Wenn Sie dann die Größe des Fensters ändern, wird die Größe des Layouts auf die gleiche Weise geändert.


Ich erwähne, dass sich das vertikale Layout (und damit der Inhalt) dehnt, wenn der Benutzer die Größe des gesamten Fensters ändert. Es ist mir egal, wie es im Qt Designer aussieht.
Elazar Leibovich

-7

Stellen Sie die horizontale Richtlinie und die vertikale Richtlinie für die Steuerelemente / Widgets auf "Bevorzugt" .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.