隐藏QWidget,但保留空白,这样布局就没有效果



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

有可能保留这片空地吗?理想情况下,我希望其他小部件处于相同的位置,大小相同。

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调用。

最新更新