rowspan of QGridLayout не работает должным образом

Вот как нарисовать кнопку, которая охватывает 2 столбца:

#include <QtGui>

int main(int argv, char **args)
{
QApplication app(argv, args);

QPushButton *foo = new QPushButton("foo");
QPushButton *bar = new QPushButton("bar");
QPushButton *baz = new QPushButton("baz");

QGridLayout *layout = new QGridLayout();
layout->addWidget(foo, 0, 0);
layout->addWidget(bar, 0, 1);
layout->addWidget(baz, 1, 0, 1, 2); // span 2 columns

QWidget window;
window.setLayout(layout);
window.setWindowTitle("test");
window.show();

return app.exec();
}

Запуск кода дает мне:

введите описание изображения здесь

Если я изменю макет, чтобы получить кнопку, baz, что охватывает 2 строки, я терплю неудачу:

layout->addWidget(foo, 0, 0);
layout->addWidget(bar, 1, 0);
layout->addWidget(baz, 0, 1, 2, 1); // (try to) span 2 rows

Вот что я получаю:

введите описание изображения здесь

2

Решение

С вашим макетом все в порядке, кнопка базы охватывает два ряда. Проблема в том, что он не использует все доступное пространство. Вы должны изменить политику изменения размера кнопки по вертикали с Fixed на MinimumExpanding.

4

Другие решения

Я добавил следующее, после чего все было хорошо:

 foo->setSizePolicy(QSizePolicy::MinimumExpanding,
QSizePolicy::MinimumExpanding);
bar->setSizePolicy(QSizePolicy::MinimumExpanding,
QSizePolicy::MinimumExpanding);
baz->setSizePolicy(QSizePolicy::MinimumExpanding,
QSizePolicy::MinimumExpanding);

(Спасибо)

4

По вопросам рекламы [email protected]