2010-08-31 8 views
10

Ich habe ein Fenster mit einem QScrollArea mit ein paar Widgets drin.Qt: Wie man ein Fenster auf seinen neuen Inhalt skaliert

Bis jetzt erstellte ich die QScrollArea und seine untergeordneten Widgets im Konstruktor meines Fensters, und dann änderte ich das Fenster vertikal, um seinen Inhalt unter Verwendung resize(400, sizeHint().height()) anzupassen. So weit, ist es gut.

Jetzt, ich hinzufügen oder entfernen Widgets in der QScrollArea zur Laufzeit. Was muss ich tun, nachdem ich Widgets hinzugefügt oder entfernt habe, damit das Fenster vertikal in den Inhalt passt? Sollte ich adjustSize() anrufen? resize(sizeHint())? Sollte es einen ersten Anruf bei layout->activate() oder vielleicht updateGeometry() geben? Welche Größenrichtlinien spielen in diesem Fall eine Rolle? Die des Fensters oder des Bildlaufbereichs oder beides? Ich habe versucht, sie alle auf Expanding zu setzen.

Ich verwende Qt 4.6 unter Windows.

+0

Soll die QScrollArea keine Bildlaufleisten haben? –

+0

Absolut, jetzt ist die Idee, die vertikale Bildlaufleiste loszuwerden. Der nächste Schritt wird sein, dass es nur angezeigt wird, wenn die Gesamthöhe des QScrollArea-Inhalts wirklich zu groß ist oder wenn der Benutzer die Größe des Fensters ändert. –

Antwort

9

Es scheint, dass das Aufrufen von resize(sizeHint()) (ohne irgendeine andere Magie), nachdem Widgets dem Bildlaufbereich hinzugefügt wurden, tatsächlich den Trick macht. Irgendwie hat das das erste mal vermisst.

+1

Ich brauchte es für die vertikale Anpassung, und das kam heraus: 'QSize s = sizeHint(); s.setWidth (Breite()); Größenänderung (s); ' – Notinlist

+0

Vielleicht hilft das jemand anderem, der diese Frage findet, aber mein Problem stattdessen hat. Der Dialog hat tatsächlich die Größe für den Inhalt geändert, aber aufgrund der Größe des Fensters im QT-Designer wurde er unten abgeschnitten. Die Größe des Fensters im QT-Designer zu ändern, um für mehr Platz am Boden zu sorgen, hat es für mich behoben – slf