8

在早期的 Qt 5 版本中,我必须断开 lambda 与信号的连接,如下所示:“断开 Qt5 中的 lambda 函数”。

在这里,我找到了以下语句: “接收器”被销毁时不会自动断开连接,因为它是一个没有 QObject 的函子。但是,从 5.2 开始,有一个重载,它添加了一个“上下文对象”。当该对象被销毁时,连接断开(上下文也用于线程亲和性:将在用作上下文的对象的事件循环的线程中调用 lambda)。

  • 这是否意味着我不再需要将 lambdas 与 Qt5.2 或更高版本断开连接?
  • 我必须传递该上下文还是自动完成?
4

1 回答 1

12

当通过QObject::~QObject()销毁对象时,Qt 会自动删除与对象的所有连接。所以如果你创建一个到 lambda 的连接,当发送对象被删除时,连接会被自动清理。您没有,以前也不需要自己断开连接。

当您需要对连接的生命周期进行更细粒度的控制时,将使用您所指的上下文对象。当您希望在销毁另一个对象(上下文对象)时删除连接时使用此选项。如果您需要在发送者被销毁之前删除连接,这将更容易删除。

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

于 2015-10-26T23:49:15.210 回答