2015-09-01 39 views
0

我用我在運行時創建的QWidget對象動態填充我的QVBoxLayout。我想在運行時刪除它們,但是如何?從QLayout中刪除QWidgets?

我可以刪除部件逐一:

void QLayout::removeWidget(QWidget * widget) 

我可以以某種方式通過佈局迭代?

+0

我不明白你的問題。 'removeWidget'有什麼問題? –

+0

@Jérôme我把多個QWidgets放到那個佈局中,我不記得他們。我想將它們全部刪除。 –

回答

2

有一個count方法,返回存儲的小部件的數量,和一個itemAt()方法,給定一個索引,它返回指向相對存儲小部件的指針。您可以檢索所有指針,然後將其刪除。您應該首先檢索所有指針,因爲如果在計數時刪除一個指針,則迭代期間存儲的小部件的數量會發生變化。

itemAt()檢索QLayoutItem與檢索小部件本身的widget方法。

while (layout->count() != 0) { 
    QLayoutItem *item = layout->itemAt(0); 
    layout->removeWidget(item->widget()); 
} 
4

條條大路通羅馬;)

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; 
}