Qt 对象清理器

QObjectCleanupHandler Qt 对象清理器是实现自动垃圾回收的很重要的一部分。它可以注册很多子对象,并在自己删除的时候自动删除所有子对象。同时,它也可以识别出是否有子对象被删 除,从而将其从它的子对象列表中删除。这个类可以用于不在同一层次中的类的清理操作,例如,当按钮按下时需要关闭很多窗口,由于窗口的 parent 属性不可能设置为别的窗口的 button,此时使用这个类就会相当方便。

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,这样做会同时删除掉所有未关闭的窗口。

posted @ 2016-07-05 10:45  朱诸  阅读(676)  评论(0编辑  收藏  举报