删除已有布局
- 实现删除已有的界面布局,方便动态更新界面
主要思路
-
遍历布局,判断每一个item的类型:widget就直接删除,布局的话就先删除布局内的widget,其余类型都直接移除。
-
注意:这里没有考虑那种复杂的布局嵌套情况。需要考虑的可以自行修改(递归形式)。
-
widget的父控件需要先置空(参考网上的教程,没有测试)。
void ClearLayout() { while(m_pMainLayout->count()) { QWidget *pWidget=m_pMainLayout->itemAt(0)->widget(); if (pWidget) { pWidget->setParent (NULL); m_pMainLayout->removeWidget(pWidget); delete pWidget; } else { QLayout *pLayout=m_pMainLayout->itemAt(0)->layout(); if (pLayout) { while(pLayout->count()) { QWidget *pTempWidget=pLayout->itemAt(0)->widget(); if (pTempWidget) { pTempWidget->setParent (NULL); pLayout->removeWidget(pTempWidget); delete pTempWidget; } else { pLayout->removeItem(pLayout->itemAt(0)); } } } m_pMainLayout->removeItem(m_pMainLayout->itemAt(0)); } } }