[英]Deleting widget that is in layout
如果我們將為布局中的widget
運行delete widget
會發生什么? 如果這個案例寫在文檔中,請給我鏈接(我沒有找到)。
代碼示例:
QLabel *l1 = new QLabel("1st");
QLabel *l2 = new QLabel("2nd");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(l1);
layout->addWidget(l2);
QWidget *mainWidget = new QWidget;
mainWidget->setLayout(layout);
mainWidget->show();
delete l1;
l2->deleteLater();
l1
和l2
會發生什么事情會有所不同嗎?
我相信你所做的幾乎是一樣的,盡管兩者都不能正確地從布局中刪除你應該這樣做的方式。 它們仍被遺留在布局中(如果我沒記錯的話)
第一個只是現在刪除項目。 第二個將在控件返回事件循環后刪除它。 但實際上,人們通常從布局中刪除項目的方式是從布局中取出它們(讓它有機會自行調整),然后刪除項目及其小部件(如果需要)。
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
delete child->widget();
delete child;
}
同樣,只有在想要銷毀添加的窗口小部件時,除了包含它的布局項之外,才需要刪除窗口小部件( child->widget()
)。
QLayout偵聽ChildRemoved類型的事件並相應地刪除項目。 簡單地刪除小部件是安全的。
不要在連接有活動插槽的Qobjects上使用delete l1,你將遇到崩潰。 使用:l1-> hide(); L1-> deleteLater(); 這對我來說可以
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.