Qt 对象清理器

Posted 朱诸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,这样做会同时删除掉所有未关闭的窗口。

以上是关于Qt 对象清理器的主要内容,如果未能解决你的问题,请参考以下文章

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

顶点着色器 glsl qt 中的纹理映射

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

QT 实用代码片段

如何关闭 Qt 子进程并让子进程执行清理代码?

GLSL:使用片段着色器进行对象翻译