基于某些原因,我们可能希望往一个布局内动态删除和添加新的元素,添加我们都能很清楚得看到addWidget这个接口.删除的话官方也有示例:
QLayoutItem *child;
while(child=this->ui->centralWidget->layout()->takeAt(0)) {
delete child;
}
不知道是我个人理解的角度有问题还是怎么,我感觉就很奇怪,我添加一个widget的时候,是传入widget的指针,删除的时候是删除一个QLayoutItem的指针,读了半天的源代码才明白,在addWidget的时候,做了这样一些操作
void QLayout::addWidget(QWidget *w)
{
addChildWidget(w);
addItem(QLayoutPrivate::createWidgetItem(this, w));
}
先将传入的widget指针交给layout的所属widget,这样就实现了传入的widget成为了另一个widget的子widget,接着在删除父widget时会清理(析构)这个子widget.
void QLayout::addChildWidget(QWidget *w)
{
QWidget *mw = parentWidget();
QWidget *pw = w->parentW