BoxLayout中的QLabel和QCheckBox的对齐会产生意外结果

时间:2016-09-22 14:50:07

标签: qt qlayout

当我向QLabelQCheckBox添加QVBoxLayoutQHBoxLayout时,我希望它们能够均匀分布,但复选框将紧密排列在非常底部(在上面的示例中),标签将以小部件中生成的可用空间为中心。如何更改此行为以均匀分配所有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);
}

这就是结果:

Result of Code Example

1 个答案:

答案 0 :(得分:1)

看看QSizePolicy。您需要QLabel QCheckBoxQSizePolicy::Preferred es Preferred来自setSizePolicy

  

默认策略为Preferred / sizeHint(),表示小部件   可以自由调整大小,但更喜欢大小QLineEdit返回。   类按钮的小部件设置大小策略以指定它们可以   水平拉伸,但垂直固定。这同样适用于   lineedit控件(例如QSpinBoxQComboBox或可编辑的   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将占用所有额外空间。