一、 正常使用布局文件
ui->setupUi(basewin);
这时候如果再次对QWidget执行setupUi是没有效果的,需要先把原有的布局删除
二、删除Qwidget/QFrame所有控件和layout(布局)
void BaseSettingUI::DelLayoutItem(QLayoutItem *layoutItem) {
if (NULL==layoutItem)
return ;
if (layoutItem->layout()) {
printf("是一个layout\n");
QLayoutItem* layout = NULL;
while((layout=((QLayout*)layoutItem)->takeAt(0)))
DelLayoutItem(layout);
}
printf("删除一个布局控件\n");
delete layoutItem;
}
void BaseSettingUI::ClearAllWidget(QWidget *w) {
if (NULL==w)
return;
// 删除控件(获取所有的控件)
const QList<QWidget*>& items = w->findChildren<QWidget*>();
printf("控件数量 %d\n", items.count());
for (QWidget *item : items) {
qDebug() << item->objectName();
delete item;
}
// 除了控件,还有layout需要删除
DelLayoutItem(w->layout());
}