一般动态布局,经常删除控件的情况下用到留着备用.
void removeLayout(QWidget *wdialog, QLayout *layout) ;
void removeLayout(QWidget *wdialog, QLayout *layout) {
wdialog->hide();
QLayoutItem *child;
if (layout == NULL)
return;
while ((child = layout->takeAt(0)) != NULL) {
if (child->widget()) {
child->widget()->setParent(NULL);
} else if (child->layout()) {
removeLayout(NULL, child->layout());
}
delete child;
}
delete layout;
}
以上代码已测试.
上述代码实际有个bug,最近调试内存泄露发现了问题所在,
代码没有删除layoutIteam就是child->widget(),内存每次大概泄露0.1M左右
因此做了一下修改,
void removeLayout(QWidget *wdialog, QLayout *layout) {
wdialog->hide();
QLayoutItem *child;
if (layout == NULL)
return;
while ((child = layout->takeAt(0)) != NULL) {
if (child->widget()) {
child->widget()->setParent(NULL);
delete child->widget();/* 修改备注,修复内存泄露 */
} else if (child->layout()) {
removeLayout(NULL, child->layout());
}
delete child;
child = NULL;
}
delete layout;
layout = NULL;
}