2015-10-26 22 views
5

在早期的Qt 5版本中,我必须断开信号的lambdas,如下所示:“Disconnecting lambda functions in Qt5”。我是否还需要断开Qt5.5中的信号的lambda?

Here我发现下面的语句: 有当“接收器”被破坏,因为它是没有的QObject仿函数没有自动断线。但是,从5.2开始,会有一个过载添加一个“上下文对象”。当该对象被销毁时,连接被中断(上下文也被用于线程关联:lambda将在用作上下文的对象的事件循环的线程中被调用)。

  • 这是否意味着我不再需要断开与Qt5.2或更高版本的lambdas?
  • 我必须通过该环境还是自动完成?

回答

6

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

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

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

+0

上下文对象需要是QObject,不是吗?它不适用于普通的C++对象,只是为了再次确认。 –

+0

是的,上下文对象必须是QObject。 – ajshort

相关问题