Qt 對象清理器

QObjectCleanupHandler Qt 對象清理器是實現自動垃圾回收的很重要的一部分。它能夠註冊不少子對象,並在本身刪除的時候自動刪除全部子對象。同時,它也能夠識別出是否有子對象被刪 除,從而將其從它的子對象列表中刪除。這個類能夠用於不在同一層次中的類的清理操做,例如,當按鈕按下時須要關閉不少窗口,因爲窗口的 parent 屬性不可能設置爲別的窗口的 button,此時使用這個類就會至關方便。spa

?
1
2
3
4
5
6
7
8
9
10
11
12
13
QObjectCleanupHandler *cleaner = new QObjectCleanupHandler; // 建立實例 
QPushButton *w = new QPushButton( "Remove Me" ); // 建立窗口
 
w->show();
cleaner->add(w); // 註冊第一個按鈕 
connect(w, SIGNAL(clicked()), w, SLOT(deleteLater())); // 若是第一個按鈕點擊以後,刪除自身
w = new QPushButton( "Nothing" ); // 建立第二個按鈕,注意,這個按鈕沒有任何動做 
cleaner->add(w);
w->show();
w = new QPushButton( "Remove All" ); // 建立第三個按鈕,刪除全部
cleaner->add(w);
connect(w, SIGNAL(clicked()), cleaner, SLOT(deleteLater()));
w->show();

在上面的代碼中,建立了三個僅有一個按鈕的窗口。第一個按鈕點擊後,會刪除掉本身(經過 deleteLater() 槽),此時,cleaner 會自動將其從本身的列表中清除。第三個按鈕點擊後會刪除 cleaner,這樣作會同時刪除掉全部未關閉的窗口。code

相關文章
相關標籤/搜索