2012-05-21 9 views
6

Czy istnieje sposób, aby właściwość layoutStretch zawsze była przestrzegana? Na przykład. Ustawiłem go na "1,3,2", ale potem widget (etykieta) w pierwszej części ("1" w "1,3,2") rozszerza się (gdy dodaje się więcej tekstu), a następnie racja 1: 3: 2 nie jest już przestrzegana. Oznacza to, że stosunek "1: 3: 2" zamienia się w coś bardziej przypominającego "3: 1: 3".Ustalanie rozmiaru układów

Odpowiedz

7

Powinieneś rzucić okiem na nieruchomości QWidget::sizePolicy. Kontroluje, w jaki sposób układ respektuje jego dzieci podczas aktualizacji geometrii.

Więc co trzeba zrobić, to: Sprawdź układ ignorować poziome sizeHints z widżetów potomnych poprzez ustawienie poziome sizePolicy trzech widgetów dzieci do QSizePolicy::Ignored:

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

(Drugi argument zapewni zasady wertykalne nie zostały zmienione przez to oświadczenie Należy oczywiście ustawić politykę rozmiaru każdego widżetu podrzędnego, przykładowy kod dotyczy tylko etykiety.)

Należy pamiętać, że zawartość layoutu musi być widżety; Myślę, że układom zagnieżdżonym nie można przypisać strategii rozmiaru (ale mogę się mylić). Przynajmniej przy użyciu QtDesigner, nie ma możliwości zastosowania polityki rozmiaru do samego układu (jeśli nie jest to układ widgetu). Zobacz komentarze, aby poznać szczegóły.


W QtDesigner można ustawić sizePolicy z widżetów potomnych tak:

Przed:
enter image description here
złączowe:
enter image description here
Wybierz elementy w layout:
enter image description here
Ustaw politykę rozmiar poziomy do „Ignorowany”:
enter image description here
Wynik:
enter image description here

+0

w QtDesigner Kliknąłem na jednej z 3 widgetów verticalLayout że są trzy obiekty w widgecie horizontalLayout (ten, który ma układ 1: 3: 2 layoutStretch). Jednak nie ma sizePolicy, tylko layoutLeftMargin, layoutTopMargin, layoutRightMargin, layoutBottomMargin, layoutSpacing, layoutStretch i layoutSizeConstraint. –

+0

@DavidDoria Dodałem zrzuty ekranu dla QtDesigner. – leemes

+0

Przepraszam, wydaje mi się, że wciąż nie było jasne. Mam widżety verticalLayout, które są dziećmi widżetu HorizontalLayout. Te widżety wertykalne to te, które chcę naprawić, ale nie mają one właściwości "sizePolicy". –