Скройте 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
вызовы, которые определяют относительные пропорции ячеек сетки.