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

Hor*_*ter 8 c++ lambda qt qt5.5

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

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

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

ajs*_*ort 12

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

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

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