我知道从槽处理中删除 QObject 可能会使应用程序崩溃,因为它可能有其他排队的事件。
因此,我将使用 obj->deleteLater(),而不是使用“delete obj”。据我所知,obj 等待处理所有排队的事件,然后“删除 obj”。
QObject::~QObject ()所有传入和传出该对象的信号都会自动断开,并且该对象的任何挂起的已发布事件都会从事件队列中删除。然而,使用deleteLater()通常比直接删除QObject子类更安全。
但是,其他信号/槽进程又如何呢?我的意思是,如果您已连接来自位于不同线程中的对象的信号/槽,如 Qt::QueuedConnection 或 Qt::BlockingQueuedConnection。它们是否已出队等待处理?
提前致谢。
deleteLater
将从对象所属的线程中删除对象。Qt::QueuedConnection
and Qt::BlockingQueuedConnection
(also Qt::AutoConnection
)的工作方式是从带有槽的对象所属线程的事件循环中调用槽。
因此,如果您添加到您发布的此报价中,这意味着任何待处理的Qt::*QueuedConnection
当对象被销毁时将自动解除。这意味着您在使用这些连接时是安全的,并且deleteLater
。使用时可能会出现问题Qt::DirectConnection
使用不同的线程,或者当您尝试直接销毁对象时(delete pointer;
)来自错误的线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)