踏遍九州五岳,纵情山河万里

 界面重新布局的情况下,需要删除原先的布局及控件,保证内存不泄露,删除之后控件消失即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 循环遍历子控件,setParent(NULL)防止删除之后控件不消失
// 在Qt的内存管理机制下,父控件析构会同时析构子控件
QLayout *layout = this->layout();
if (layout)
{
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0)
{
if (child->widget())
{
child->widget()->setParent(NULL);
}
}
delete layout;
layout = nullptr;
}