错误代码

QObjectList children = this->children();
foreach (QObject*child, children) {
    if (child->objectName() == "MyLabel")delete child;
}

提示错误如下:

ASSERT: "!d->isWidget" in file kernel\qobject.cpp, line 2003

意思就是断言某个控件不是widget

错误原因

这里我重写了QLabel为Mylabel,并设置了objectname为MyLabel,
当提示这个错误的时候我是没有一丝头绪的
可以设置父对象为NULL,但是一旦delete这个Mylabel对象或者deletelater都会崩溃
通过调试我也是差不多了解了错误的主要原因:delete没有new过的指针
于是我从Mylabel类入手,发现了错误源

Mylabel::~Mylabel(){
  delete name;
  delete pic_page;
}

name 和 pic_page 是Mylabel内部的控件,之前都有通过成员函数new了出来,但是如果没new过就灾难了,真的让我头大了一上午。

解决方法

判断是否空指针即可
Mylabel::~Mylabel(){

if (!name)
delete name;
if (!pic_page)
delete pic_page;

}
这样改了后便不再提示错误了。