gpt4 book ai didi

c++ - 在信号/槽处理期间删除 QObject

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:32 25 4
gpt4 key购买 nike

我知道从插槽处理中删除 QObject 可能会使应用程序崩溃,因为它可能有其他排队的事件。因此,我将使用 obj->deleteLater() 而不是使用“delete obj”。据我所知,obj 等待处理所有排队的事件,然后“删除 obj”。

QObject::~QObject () All signals to and from the object are automatically disconnected, and any pending posted events for the object are removed from the event queue. However, it is often safer to use deleteLater() rather than deleting a QObject subclass directly.

但是,其他信号/槽进程又如何呢?我的意思是,如果您连接了来自不同线程中的对象的信号/槽,例如 Qt::QueuedConnection 或 Qt::BlockingQueuedConnection。它们是否出队等待处理?

提前致谢。

最佳答案

deleteLater 将从对象所属的线程中删除对象。 Qt::QueuedConnectionQt::BlockingQueuedConnection(还有 Qt::AutoConnection)的工作方式是从带插槽的对象属于哪个线程。
因此,如果您将此引用添加到您发布的内容中,这意味着任何挂起的 Qt::*QueuedConnection 都将在对象被销毁时自动解除。这意味着您在使用这些连接和 deleteLater 时是安全的。当您将 Qt::DirectConnection 用于不同的线程时,或者当您尝试从错误的线程直接销毁对象(delete pointer;)时,可能会出现问题。

关于c++ - 在信号/槽处理期间删除 QObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18505544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com