Размер строки QVBoxLayout

У меня есть виджет, я использую QVBoxLayout с виджетом для организации рядов виджетов. Первый виджет — это QLabel, за которым следуют несколько виджетов QPushButton.

Ширина каждого виджета занимает 100% ширины, однако высота первого виджета (QLabel) намного больше, чем у следующих за ним виджетов QPushButton. Все QPushButtons имеют одинаковую высоту.

Похоже, что первая строка была увеличена в размере, чтобы дополнить макет, чтобы заполнить родителя. Если это так, есть ли способ указать макету использовать только высоту, необходимую для внутренних виджетов, а не дополнять?


person SPlatten    schedule 16.05.2019    source источник


Ответы (1)


Разница между поведением макета для 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();
}
person eyllanesc    schedule 16.05.2019