deleteLater 稍后删除对象 公共槽


deleteLater() 用于延迟异步、彻底删除 QObject 对象。

  1. 删除对象

  2. 在 PyQt PySide,有时必需使用 deleteLater() 稍后删除,而不是使用 del 删除语句 (或 delattr 删除属性内置函数) 来删除 QObject 对象。

    因为 del 删除语句 (或 delattr 删除属性内置函数) 只是删除了 QObject 对象的引用,并没有彻底删除对象,导致该对象仍始终存活,尤其是在 linux 平台。

    注意: 在 PyQt PySide, 并不是所有 QObject 对象的删除,都要调用 deleteLater() 稍后删除公共槽 (一般来说,是尽可能使用 Python 虚拟机的自动垃圾回收机制)。

  3. 异常警告

  4. 当 QThread 线程实例 self.threadObject 先调用 quit() 离开槽, 再使用 self.threadObject.deleteLater() 稍后删除公共槽、del self.threadObject 形式语句、或 delattr(self, "threadObject") 内置函数,删除线程实例。

    若之后仍有此 QThread 线程实例 self.threadObject 的相关操作 (包括自动垃圾回收),在后台就可能输出以下警告提示 (甚至导致应用程序崩溃):

    QThread: Destroyed while thread is still running
    						

    相比 terminate() 立即终止 QThread 线程,虽然存在以上现象,但 quit() 异步、安全离开线程更可控。

    注意: 不推荐使用 terminate() 立即终止 QThread 线程实例,因为会导致线程死锁、界面卡死,甚至可能导致应用程序崩溃。

版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。

内容表

  1. 删除对象
  2. 删除线程

 

内容表

  1. del 句法

上一话题

QEventLoop 类

下一话题

QRect 类

快速搜索