1、直接删除,释放widget和layout
QLayout* layout;
QLayoutItem *child;
//每次使用takeAt取了之后,原有的count就会减少,所以每次取下标为0的即可
while ((child = layout->takeAt(0)) != NULL)
{
if (child->widget())
{
child->widget()->setParent(NULL);
delete child->widget();
}
else if (child->layout())
{
layout->removeItem(child->layout());
}
delete child;
child = NULL;
}
delete layout;
查了网上的函数用法,发现主要是获取layout下的控件数,并且将其删除,但是这个并没有有效解决清除Widget下的所有子控件的问题,在使用时,仍然发现更深层次的子控件没有删除,反而失去管理了。所以这个方法只适用于没有更深子控件的情况。
2、介绍一下ItemAt,takeAt,Count这三个函数
Count这个函数是返回layout下的本层次的控件数量,例如设置了一个两层的布局,外层的GridLayout计算count时,只会得出结果2,无论内层的HBoxLayout添加多少个,都和外层的无关。
QGridLayout* GLayout = new QGridLayout(this);
QHB