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