2016-09-22 168 views
0

當我添加一個QLabelQCheckBox s到無論是QVBoxLayoutQHBoxLayout我希望它們均勻地分佈,但複選框將在最底部緊allign(在上面的例子中),並且標籤將集中在小部件中的結果空閒空間中。我如何改變這種行爲來平均分配所有3個小部件?Allignment給人意想不到的結果

非常感謝。

這是示例代碼:

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    QLabel* l = new QLabel("Hi"); 
    QCheckBox* c = new QCheckBox("Label"); 
    QCheckBox* c2 = new QCheckBox("Label"); 
    l->setText("Hi"); 
    QVBoxLayout* v = new QVBoxLayout; 

    v->addWidget(l); 
    v->addWidget(c); 
    v->addWidget(c2); 
    setLayout(v); 
    ui->setupUi(this); 
} 

這是結果:

Result of Code Example

+0

將小部件添加到佈局後,您是否嘗試過使用'addStretch()','addStrut()'和'addSpacing()'?我建議你也試試'QGridLayout'。 – dschulz

回答

1

看看QSizePolicy。您需要setSizePolicy爲您QLabelQCheckBox ES是QSizePolicy::Preferred,從docs

的默認策略是Preferred/Preferred,這意味着小部件 可以自由調整大小,但喜歡是大小sizeHint()回報。 類似按鈕的小部件設置尺寸策略以指定它們可能水平延伸但縱向固定。這同樣適用於lineedit控件(如QLineEdit,QSpinBox或可編輯的 )和其他水平方向的小部件(如 QProgressBar)。

目前,您的QLabel具有首選高度,而兩個QCheckBox es具有固定的高度。這意味着QLabel將自動擴展至佔用任何額外的垂直空間(即不能採取QCheckBox ES。

所以,一切爲了您的小工具設置爲Preferred高度,你需要添加下面給你的構造:

l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 
c->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 
c2->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 

另一種選擇,將是add spacers小部件中的每一個周圍,像這樣:

v->addStretch(); 
v->addWidget(l); 
v->addStretch(); 
v->addWidget(c); 
v->addStretch(); 
v->addWidget(c2); 
v->addStretch(); 
setLayout(v); 

這樣QSpacerItem將佔用所有額外的空間。

相關問題