zoukankan      html  css  js  c++  java
  • 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,这样做会同时删除掉所有未关闭的窗口。

  • 相关阅读:
    rabbitmq 学习10channel 说明
    ASP.NET中进行消息处理(MSMQ) 一
    ThreadLocal原理及用法详解
    设计模式责任链模式
    枚举详解之EnumSet、EnumMap用法
    设计模式策略模式和工厂模式结合使用
    Java并发编程系列之CyclicBarrier详解
    [解题报告]求平均成绩
    [解题报告]1005 Number Sequence
    [解题报告]1013Digital Roots
  • 原文地址:https://www.cnblogs.com/laien/p/5642744.html
Copyright © 2011-2022 走看看