2012-03-30 11 views
5

Die Child-Parent-Hierarchie ist die folgende: mainWindow -> centralWidget -> frame -> widget.Größe von QMainWindow basierend auf einem Kind-Widget?

Widget wird während der Lebensdauer der Anwendung in der Größe geändert, es wird jedoch immer auf eine feste Größe festgelegt. Ich möchte, dass das QMainWindow darauf basierend die Größe ändert - um eine minimale Größe zu haben, die benötigt wird, um alle Widgets anzuzeigen.

Um dies zu tun, muss ich dies derzeit tun.

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

Es funktioniert nicht richtig, wenn ich nur die Größe des Hauptfensters ändern. Alle Eltern des Widgets müssen in der Größe geändert werden, damit dies funktioniert. Gibt es einen eleganteren Weg? Ist es möglich, die Größe des Hauptfensters für alle Kinder zu ändern?

HINWEIS: Alle Widgets außer "Widget" verfügen über eine automatische Layoutverwaltung. Daher finde ich es merkwürdig, dass sie ihre Größe nicht basierend auf dem "Widget" ändern.

+1

hilft könnte ich Ihre Frage nicht ganz sein zu verstehen, aber kann man nicht nennen 'setMinimumSize()' statt 'setFixedSize()'? – Chris

Antwort

2

Das Layout bestimmt die Größe und Position der Widgets. Wenn Sie also ein untergeordnetes Widget in einem Layout explizit ändern, müssen Sie sicherstellen, dass die neue Größe korrekt über das Layoutsystem übergeben wird. Dies kann erreicht werden, indem sichergestellt wird, dass das sizeHint() des Widgets die neue Größe zurückgibt. Der von sizeHint() zurückgegebene Wert wird verwendet, wenn das Layout die neue Größe berechnet. Nachdem sich sizeHint() geändert hat, rufen Sie einfach updateGeometry() [qt.nokia.com] auf, um das Layoutsystem zu benachrichtigen, dass sich das Widget geändert hat und möglicherweise die Geometrie ändern muss.

Eine alternative Möglichkeit, um sicherzustellen, dass die Größe des übergeordneten Widgets in Abhängigkeit von der Größe des untergeordneten Elements geändert wird, ist setFixedSize() für das untergeordnete Element aufzurufen.

Weitere Details dieses prüfen ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

sollten Sie lassen Layout-Widgets Größe verwalten. Soweit ich betroffen bin gibt es zwei Situationen:

  1. Mit Layout, wenn Sie einen Elternteil resizen alle Kinder auch in Bezug auf die Größe Politik resizen Sie sie zur Verfügung gestellt. Wenn Sie eine feste Richtlinie auswählen, wird die Größe von Kindern nicht geändert. Sie müssen also die Größe von Hand ändern ... aber es ist seltsam.

  2. Wenn Sie die Größe eines Kindes so ändern, wie Sie es tun, wird die Größe des übergeordneten Elements nicht automatisch geändert. Sie müssen es von Hand machen. Glücklicherweise gibt es eine "magische Funktion dafür: AdjustSize. Wenn Sie es aus QMainWindow aufrufen, wird das gesamte Widget auf seine optimale Größe angepasst. Es ist möglich (ich kann es hier nicht testen), dass dies zur Laufzeit nicht funktioniert, wenn die Größenrichtlinie ist auf fixiert.

Hoffnung, die

+0

Qt 5.5. 'AdjustSize 'funktioniert nicht,' resize (sizeHint()) 'does. –

Verwandte Themen