2013-05-01 9 views
5

Dodałem QLabel z małym zdaniem, QLineEdit i QPushButton, w tej kolejności, do QVBoxLayout. Moje główne okno to 70% pulpitu użytkownika.Etykieta rozwija się pionowo w QVBoxLayout

Mój problem polega na tym, że moja etykieta rozszerza się do prawie 80% wysokości okna nadrzędnego, a QLineEdit i "QButton \" są ściśnięte na dole.

Udało mi się rozwiązać ten problem: dodałem więcej etykiet bez zawartości, ale to nie może być złote rozwiązanie. Co mogę zrobić?

Próbowałem też QFormLayout, ale to nie pasuje do moich potrzeb. Podoba mi się, że widżety są w kolejności pionowej. Próbowałem na wiele sposobów z QSizePolicy, ale nie wyszło.

Odpowiedz

7

Myślę, że to, czego szukasz, to dodać element spacer. Spróbuj użyć addStretch w swoim układzie po dodaniu do niego wszystkich widżetów.

Przykład:

#include <QtGui> 

class W: public QWidget 
{ 
    Q_OBJECT 

    public: 
     W(bool spacer, QWidget *parent = 0) 
      : QWidget(parent) 
     { 
      QLabel *l = new QLabel("Hello!"); 
      QLineEdit *e = new QLineEdit; 
      QPushButton *p = new QPushButton("Go"); 

      QVBoxLayout *vl = new QVBoxLayout; 
      vl->addWidget(l); 
      vl->addWidget(e); 
      vl->addWidget(p); 

      if (spacer) 
       vl->addStretch(); 

      setLayout(vl); 

      resize(200, 400); 
     } 
}; 

Renders:

enter image description here

(bez rozciągania po lewej stronie, rozciągnąć po prawej stronie.)

+0

dziękuję to dokładnie to, czego szukałem:) spróbuję tego;) ale co robisz, jeśli (spacer) oznacza? – dadod2

+0

To tylko parametr w konstruktorze, który tam umieściłem, aby móc łatwo pokazać dwa. (tzn. okno po lewej zostało utworzone z czymś w rodzaju 'new W (false);', po prawej stronie z 'new W (true);'.) To tylko dla tego demo. – Mat

+0

ah okay tak i działa dobrze dziękuję – dadod2