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

相关文章
相关标签/搜索