2012-05-21 22 views
6

Fixing Gibt es eine Möglichkeit, die layoutStretch Eigenschaft immer befolgt werden zu machen? Z.B. Ich habe es auf "1,3,2", aber dann ein Widget (ein Label) im ersten Teil (die "1" in "1,3,2") erweitert (wenn mehr Text hinzugefügt wird), und dann die 1: 3: 2-Ration wird nicht mehr respektiert. Das heißt, das Verhältnis "1: 3: 2" wird zu etwas wie "3: 1: 3".die Größe des Layouts

Antwort

7

Sie sollten auf dem Grundstück QWidget::sizePolicy einen Blick darauf werfen. Es steuert, wie das Layout die sizeHint() seiner untergeordneten Elemente bei der Aktualisierung der Geometrien berücksichtigt.

Also, was Sie tun müssen, ist: Machen Sie das Layout der horizontalen sizeHints der Kind-Widgets ignorieren, indem die horizontale sizePolicy der drei Kind-Widgets zu QSizePolicy::Ignored Einstellung:

QLabel *label = ...; 
... 
label->setSizePolicy(QSizePolicy::Ignored, label->sizePolicy().verticalPolicy()); 

(Das zweite Argument, die sicherstellen, Die vertikale Richtlinie wird durch diese Anweisung nicht geändert. Natürlich sollten Sie die Größenrichtlinie jedes untergeordneten Widgets festlegen, dieser Beispielcode ist nur für das Etikett.)

Beachten Sie, dass der Inhalt Ihres Layouts sein muss Widgets; Ich denke, verschachtelten Layouts kann keine Größenrichtlinie zugewiesen werden (aber ich könnte falsch liegen). Zumindest unter Verwendung von QtDesigner gibt es keine Möglichkeit, eine Größenrichtlinie auf ein Layout selbst anzuwenden (wenn es nicht das Layout eines Widgets ist). Siehe Kommentare für Details.


In QtDesigner, können Sie die sizePolicy der Kind-Widgets wie folgt festgelegt:

Bevor:
enter image description here
Shrinked:
enter image description here
die Elemente auswählen, die im Layout:
enter image description here
die horizontale Größe Politik auf "Ignoriert":
enter image description here
Ergebnis:
enter image description here

+0

in QtDesigner ich auf einem der drei Vertical widgets angeklickt, dass die drei Objekte in der Horizontallayout-Widget sind (dasjenige, das den 1: 3: 2 LayoutStretch hat). Allerdings gibt es keine sizePolicy, nur layoutLeftMargin, layoutTopMargin, layoutRightMargin, layoutBottomMargin, layoutSpacing, layoutStretch und layoutSizeConstraint. –

+0

@DavidDoria Ich habe Screenshots für QtDesigner hinzugefügt. – leemes

+0

Sorry, ich denke, ich war immer noch nicht klar. Ich habe verticalLayout-Widgets, die die Kinder eines horizontalLayout-Widgets sind. Diese verticalLayout-Widgets sind diejenigen, für die ich das Verhältnis von fixieren möchte, aber sie haben keine "sizePolicy" -Eigenschaft. –

Verwandte Themen