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