今天在写一个界面操作时,如下:
objList = ui->widget1->children();
for(int i=0; i<objList.length(); i++)
{
if(objList.at(i)->inherits("Group"))
{
Group *tmp = qobject_cast<Group *>(objList.at(i));
ui->layout1->removeWidget(tmp);
}
}
测试发现,执行了removeWidget之后,界面的控件,还在那里好好的,这是怎么回事呢?
???
后来,查资料发现,需要先子控件的父类断开关系,再removeWidget才起作用,试了一下,果类如此,代码如下:
objList = ui->widget1->children();
for(int i=0; i<objList.length(); i++)
{
if(objList.at(i)->inherits("Group"))
{
Group *tmp = qobject_cast<Group *>(objList.at(i));
tmp->setParent(NULL);
ui->layout1->removeWidget(tmp);
}
}
加了这一句:tmp->setParent(NULL);
就可以把控件删除掉了,非常奇怪为什么这样,如果直接delete tmp,会引发崩溃的问题
原因不明,但这样就可以。
或者
在对单个控件操作时,首先第一步,需要断绝其与父控件的关系,再单独收拾它才可以。