标题:(求助)关于QWidget *是否调用 delete进行析构。
作者:家有布衣
日期:2016-11-08 19:04
内容:
在成员函数中用到QWidget *w =new QWidget;
在QListWidget中运用,setItemWidget(item,w);
我把w进行析构出现段错误,做了判断,但是其值并不是NULL。
问题:是是不是不用析构?
下面是qt源码,里面有setParent.void QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)
{
Q_D(QListWidget);
QModelIndex index = d->listModel()->index(item);
QAbstractItemView::setIndexWidget(index, widget);
}
void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget)
{
Q_D(QAbstractItemView);
if (!d->isIndexValid(index))
return;
if (QWidget *oldWidget = indexWidget(index)) {
d->persistent.remove(oldWidget);
d->removeEditor(oldWidget);
oldWidget->deleteLater();
}
if (widget) {
widget->setParent(viewport());
d->persistent.insert(widget);
d->addEditor(index, widget, true);
widget->show();
dataChanged(index, index); // update the geometry
if (!d->delayedPendingLayout)
widget->setGeometry(visualRect(index));
}
}
#1 [clickto 11-22 08:49]
如果你的QWidget *没有父控件,那需要手动delete,如果有父控件,那不需要手动delete,因为在父控件进行析构的时候会delete所有子控件,如果你提前进行了delete,而子控件又没有赋值为NULL因而成为野指针的话,那么当父控件进行析构的时候。。。