隐藏QWidget但保留空白区域,因此布局

时间:2015-12-01 18:25:41

标签: qt qlayout qvboxlayout

有一个QVBoxLayout,其中添加了许多QHBoxLayout。原则上,每个QHBoxLayout都有相同的小部件集。实际上我隐藏了一些小部件,这导致其他小部件变大以占据空间。

是否可以保留空白区域?理想情况下,我希望其他小部件具有相同大小的相同位置。

1 个答案:

答案 0 :(得分: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调用,它们定义了网格单元的相对比例。