相关疑难解决方法(0)

delete和deleteLater如何处理Qt中的信号和插槽?

有一个类QNetworkReply的对象.有一个插槽(在某些其他对象中)连接到其finished()信号.信号是同步的(默认值).只有一个主题.

在某些时刻,我想摆脱两个对象.没有更多的信号或任何东西.我希望他们走了.好吧,我想,我会用的

delete obj1; delete obj2;
Run Code Online (Sandbox Code Playgroud)

但我真的可以吗?~QObject的规格说:

等待传递挂起事件时删除QObject可能会导致崩溃.

什么是"待定事件"?这是否意味着当我打电话给我时delete,已经有一些"未决事件"要发送,并且它们可能会导致崩溃,我无法确定是否有任何?

所以我要说我打电话:

obj1->deleteLater(); obj2->deleteLater();
Run Code Online (Sandbox Code Playgroud)

为了安全起见.

但是,我真的很安全吗?该deleteLater补充说,将在主回路控制时到达那里进行处理的事件.是否有一些待处理事件(信号)obj1obj2已经存在,等待在处理deleteLater 之前在主循环中处理?那将是非常不幸的.我不想编写"有点删除"状态的代码检查,并忽略所有插槽中的传入信号.

qt slot qt-signals

73
推荐指数
3
解决办法
5万
查看次数

标签 统计

qt ×1

qt-signals ×1

slot ×1