1

我有一个小部件,我正在使用带有小部件的 QVBoxLayout 来组织小部件的行。第一个小部件是一个 QLabel,后跟多个 QPushButton 小部件。

每个小部件的宽度占宽度的 100%,但是第一个小部件 (QLabel) 的高度比它后面的 QPushButton 小部件大得多。所有 QPushButton 的高度都相同。

看起来第一行的大小已经增加以填充布局以填充父级。如果是这种情况,有没有办法指示布局仅使用内部小部件所需的高度而不是填充?

4

1 回答 1

0

QLabel 和 QPushButton 的布局行为的区别在于 sizePolicy,所以解决方法是QSizePolicy::Maximum在垂直部分设置策略

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    QVBoxLayout *lay = new QVBoxLayout(&w);
    QLabel *label = new QLabel("Stack Overflow");
    label->setStyleSheet("background-color:salmon;");
    QSizePolicy sp = label->sizePolicy();
    sp.setVerticalPolicy(QSizePolicy::Maximum);
    label->setSizePolicy(sp);
    lay->addWidget(label);
    for (int i=0; i<4; i++) {
        lay->addWidget(new QPushButton(QString("pushbutton-%1").arg(i)));
    }
    w.show();
    return a.exec();
}
于 2019-05-16T20:52:37.547 回答