Скройте QWidget, но оставьте пустое место, чтобы в макете не было эффекта

E сть QVBoxLayout в котором много QHBoxLayout были добавлены. каждый QHBoxLayout имеет такой же набор виджетов, в принципе. Фактически, я скрываю некоторые виджеты, и это приводит к тому, что другие виджеты становятся больше, чтобы занимать пространство.

Можно ли сохранить пустое пространство? В идеале я хотел бы, чтобы другие виджеты были в том же положении с тем же размером.

1 ответ

QGridLayout позволяет установить фиксированное относительное растяжение для всех его столбцов и строк.

В следующем примере изменение размера не происходит, когда виджеты скрыты:

QGridLayout * grid = new QGridLayout();

setLayout(grid);

// adding widgets one under another
grid->addWidget(new QLabel("Hallo"),   0, 0);
grid->addWidget(new QLabel("Spencer"), 1, 0);

QWidget * f = new QLabel("Bar");
grid->addWidget(f,                     2, 0);

QWidget * b = new QLabel("Bar");
grid->addWidget(w,                     3, 0);

// define the relative proportions of the rows
grid->setRowStretch(0, 1);
grid->setRowStretch(1, 1);
grid->setRowStretch(2, 1);
grid->setRowStretch(3, 1);

// it's even possible to set a stretch if no content is present in that row
grid->setRowStretch(4, 2);

b->hide();
f->hide();

Таким образом, вы можете скрыть любой виджет, который вам нравится, и общие пропорции не изменятся. Важны setRow/ColumnStretchвызовы, которые определяют относительные пропорции ячеек сетки.

Другие вопросы по тегам