2011-06-23 9 views
5

Chcę umieścić widget po prawej stronie QHBoxLayout, a pozostałe przestrzenie powinny rozwinąć lewą stronę. Ustawiłem SizePolicy widgetu na rozwijanie, ale nie jest poprawne. Ktoś może zaoferować pomoc? Dzięki.Rozwijanie układu Qt: jak umieścić widget po prawej stronie i pozwolić drugiemu widżetowi na pełne wypełnienie lewej strony?

Code jest tutaj:

QHBoxLayout* tmplayout = new QHBoxLayout(this); 
tmplayout->setContentsMargins(0, 0, 0, 0); 
lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored); 
tmplayout->addWidget(lineEdit, 0, Qt::AlignRight); 
tmplayout->addWidget(pushButton, 0, Qt::AlignRight); 

lineEdit powinien rozwijać.

+0

Czy ktoś mógłby podać podobny przykład? Jestem bardzo wyczerpany. – user3294

+0

Opublikuj kod, z którym masz problemy. – Gerstmann

Odpowiedz

6

Spróbuj zmienić:

tmplayout->addWidget(lineEdit, 0, Qt::AlignRight); 
tmplayout->addWidget(pushButton, 0, Qt::AlignRight); 

Do:

tmplayout->addWidget(lineEdit); 
tmplayout->addWidget(pushButton); 

Gdy mamy do czynienia z prostych układów, takich jak ten, nie ma potrzeby określania trasowania lub rozciągnąć czynniki wyraźnie.

Jeśli chcesz zmusić przycisk, aby określonym rozmiarze, można użyć setMinimumSize, setMaximumSize i setFixedSize

poważaniem

+0

To działa, dziękuję. – user3294

0

Wypróbuj fixed lub minimum zasad dotyczących wielkości. Nawet ty możesz chcieć naprawić maksymalną szerokość.

1

Nie jestem pewien, czy rozumiem Twojego problemu poprawnie, ale może trzeba spojrzeć w QSpacerItem. Jeśli to nie pomoże, możesz zrobić zgrubną makietę w Qt-Creator i opublikować zrzuty ekranu (jeden przykład pokazuje ok. To, co masz, jeden przykład pokazuje, co chcesz)

+0

Mam na myśli, w jaki sposób mogę pozwolić, aby lineEdit wypełnił lewą część układu. Czy teraz rozumiesz? – user3294

+0

Myślę, że ExplodingRat ma dla ciebie odpowiedź, albo zostaw wartości dla strech i wyrównywania, albo ustaw je przydatne wartości. http://doc.qt.nokia.com/4.7/qboxlayout.html#addWidget – bjoernz

+0

Tak, zgadza się, dziękuję! – user3294

2

Dla potrzebnych widżetów aby znaleźć się po lewej stronie i rozwinąć, spróbuj po prostu dodać je przed tymi po prawej stronie i dodaj 1 dla ich współczynnika rozciągania. Na przykład,

tmplayout->addWidget(exampleWidget, 1); 

Następnie można po prostu dodać widgety, które chcesz mieć na prawej stronie po tych po lewej stronie, przy użyciu tylko:

tmplayout->addWidget(lineEdit); 
tmplayout->addWidget(pushbutton); 

To automatycznie dać im odcinek czynnikiem 0.

Ponieważ współczynnik rozciągania exampleWidget w tym przykładzie jest 1 która jest wyższa niż domyślny 0, exampleWidget będzie rozszerzać; i, ponieważ dodasz go przed innymi, będzie po lewej.

+0

Dzięki, to działa! – user3294