我用我在運行時創建的QWidget
對象動態填充我的QVBoxLayout
。我想在運行時刪除它們,但是如何?從QLayout中刪除QWidgets?
我可以刪除部件逐一:
void QLayout::removeWidget(QWidget * widget)
我可以以某種方式通過佈局迭代?
我用我在運行時創建的QWidget
對象動態填充我的QVBoxLayout
。我想在運行時刪除它們,但是如何?從QLayout中刪除QWidgets?
我可以刪除部件逐一:
void QLayout::removeWidget(QWidget * widget)
我可以以某種方式通過佈局迭代?
有一個count
方法,返回存儲的小部件的數量,和一個itemAt()
方法,給定一個索引,它返回指向相對存儲小部件的指針。您可以檢索所有指針,然後將其刪除。您應該首先檢索所有指針,因爲如果在計數時刪除一個指針,則迭代期間存儲的小部件的數量會發生變化。
itemAt()
檢索QLayoutItem
與檢索小部件本身的widget
方法。
while (layout->count() != 0) {
QLayoutItem *item = layout->itemAt(0);
layout->removeWidget(item->widget());
}
條條大路通羅馬;)
的Qt documentation of QLayout::takeAt
狀態:
下面的代碼片段展示了一個安全的方式從 刪除所有項目佈局:
QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { ... delete child; }
要刪除該男子你需要添加一行:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child->widget();
delete child;
}
我不明白你的問題。 'removeWidget'有什麼問題? –
@Jérôme我把多個QWidgets放到那個佈局中,我不記得他們。我想將它們全部刪除。 –