C++ 隐藏QWidget时重新分配布局空间

C++ 隐藏QWidget时重新分配布局空间,c++,qt,C++,Qt,我们有一个QGridLayout,它有一个特殊的行,排列如下: +---------------------------+ | | | | | A | B | C | | | | | +---------------------------+ 有时,表示为“B”的QWidget(QLabel)是隐藏的。当这种情况发生时,我希望小部件“A”和“C”(两个QButton)重新分配

我们有一个QGridLayout,它有一个特殊的行,排列如下:

+---------------------------+
|     |                |    |
|  A  |       B        |  C |
|     |                |    |
+---------------------------+
有时,表示为“B”的QWidget(QLabel)是隐藏的。当这种情况发生时,我希望小部件“A”和“C”(两个QButton)重新分配50/50。稍后,我想把“B”放回流程中,并给他们20/60/20的布局


我尝试了
B->hide()
B->setVisible(false)
layout->removeWidget(B)
,但在每种情况下,“B的空间仍然保留在屏幕上。

您必须更改布局(因为它是一个«网格»,所有列都必须收缩)

不要将所有3个都放在GridLayout中,而是将它们添加到您添加的QHBoxLayout中
gridLayout->addLayout(vLayout,0,row,1,-1)

您必须更改布局(因为它是一个«网格»,所有列都必须收缩)

不要将所有3个都放在GridLayout中,而是将它们添加到您添加的QHBoxLayout中
gridLayout->addLayout(vLayout,0,row,1,-1)

假设您有colspan 10,那么A将包含2列,B-6和C-2

将小部件添加到布局中,如下所示:

layout->addWidget(A,0,0,1,2); // 2 - is rowspan
layout->addWidget(B,0,2,1,6); // 6 - is rowspan
layout->addWidget(C,0,8,1,2); // 2 - is rowspan
这里是:20-60-20,但当您只需要50乘50的A和C时,您需要从布局中删除A、B和C,并将它们作为

layout->addWidget(A,0,0,1,5); // 5 - is rowspan
layout->addWidget(C,0,5,1,5); // 5 - is rowspan

假设你有colspan 10,那么A会有两列,B-6和C-2

将小部件添加到布局中,如下所示:

layout->addWidget(A,0,0,1,2); // 2 - is rowspan
layout->addWidget(B,0,2,1,6); // 6 - is rowspan
layout->addWidget(C,0,8,1,2); // 2 - is rowspan
这里是:20-60-20,但当您只需要50乘50的A和C时,您需要从布局中删除A、B和C,并将它们作为

layout->addWidget(A,0,0,1,5); // 5 - is rowspan
layout->addWidget(C,0,5,1,5); // 5 - is rowspan