我还需要在Qt5.5中断开lambda与信号的连接吗?

时间:2015-10-26 23:32:33

标签: c++ qt lambda qt5.5

在早期的Qt 5版本中,我必须将lambdas与信号断开,如下所示:" Disconnecting lambda functions in Qt5"。

Here我发现了以下声明: 接收器'时没有自动断开连接。被破坏是因为它是没有QObject的仿函数。但是,由于5.2存在重载,它会添加一个"上下文对象"。当该对象被销毁时,连接被破坏(上下文也用于线程关联:lambda将在用作上下文的对象的事件循环的线程中调用)。

  • 这是否意味着我不再用Qt5.2或更高版本断开lambda?
  • 我是否必须通过该上下文或自动完成?

1 个答案:

答案 0 :(得分:11)

当通过QObject::~QObject()销毁对象时,Qt会自动删除与对象之间的所有连接。因此,如果创建与lambda的连接,则删除发送对象时,将自动清除连接。你没有,以前也没有,自己断开它。

当您需要对连接的生命周期进行更细粒度的控制时,将使用您引用的上下文对象。当您希望在销毁另一个对象(上下文对象)时删除连接时使用此方法。如果您需要在发件人销毁之前删除连接,这样可以更轻松地删除连接。

总结:您无需手动断开lambda,它们会自动清除。您可以在销毁发件人对象之前使用上下文对象删除连接。