当我向QLabel
或QCheckBox
添加QVBoxLayout
和QHBoxLayout
时,我希望它们能够均匀分布,但复选框将紧密排列在非常底部(在上面的示例中),标签将以小部件中生成的可用空间为中心。如何更改此行为以均匀分配所有3个小部件?
非常感谢。
这是示例代码:
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);
}
这就是结果:
答案 0 :(得分:1)
看看QSizePolicy
。您需要QLabel
QCheckBox
和QSizePolicy::Preferred
es Preferred
来自setSizePolicy
:
默认策略为
Preferred
/sizeHint()
,表示小部件 可以自由调整大小,但更喜欢大小QLineEdit
返回。 类按钮的小部件设置大小策略以指定它们可以 水平拉伸,但垂直固定。这同样适用于 lineedit控件(例如QSpinBox
,QComboBox
或可编辑的QProgressBar
)和其他水平方向的小部件(例如QLabel
)。
目前,您的QCheckBox
有首选高度,而QLabel
es都有固定的高度。这意味着QCheckBox
将自动展开以占用任何额外的垂直空间(Preferred
无法使用。
因此,为了将所有小部件设置为l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
c->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
c2->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
高度,您需要将以下内容添加到构造函数中:
v->addStretch();
v->addWidget(l);
v->addStretch();
v->addWidget(c);
v->addStretch();
v->addWidget(c2);
v->addStretch();
setLayout(v);
另一种选择是围绕每个小部件docs,例如:
@EnableSwagger2
这样add spacers将占用所有额外空间。