2013-05-01 85 views
5

我已將QLabel的小句子QLineEditQPushButton按此順序插入到QVBoxLayout中。我的主窗口是用戶桌面的70%。標籤在QVBoxLayout中垂直擴展

我的問題是,我的標籤擴展到父窗口高度的近80%,QLineEdit和`QButton \被擠壓在底部。

我想出了一個辦法來解決這個問題:我插入了更多沒有內容的標籤,但這不是最好的解決方案。我能做什麼?

我也試過QFormLayout但它不符合我的需要。我喜歡小部件按垂直順序排列。我用QSizePolicy嘗試了很多方法,但沒有成功。

回答

7

我想你要找的是添加一個間隔項目。將所有小部件添加到佈局後,請在佈局上嘗試使用addStretch

例子:

#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); 
     } 
}; 

呈現:

enter image description here

(無左側伸展,伸展右側)。

+0

謝謝那正是我一直在尋找: )我會試試這個;)但是如果(spacer)意味着什麼? – dadod2 2013-05-01 10:31:13

+0

這只是一個參數,我把它放在那裏,以便能夠輕鬆地顯示這兩個參數。 (即左邊的窗口是用'new W(false);'創建的,''右邊用'new W(true);'。)。)這只是爲了演示。 – Mat 2013-05-01 10:33:39

+0

啊好吧是啊,它工作正常謝謝你 – dadod2 2013-05-01 12:01:55