Размер строки QVBoxLayout - PullRequest
1 голос
/ 16 мая 2019

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

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

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

1 Ответ

0 голосов
/ 16 мая 2019

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