在 Qt5.5 中,我还需要断开 lambda 与信号的连接吗?
Do I still have to disconnect a lambda from a signal in Qt5.5?
在早期的 Qt 5 版本中,我必须断开 lambda 与信号的连接,如下所示:“Disconnecting lambda functions in Qt5”。
Here 我发现了以下语句:
当 'receiver' 被销毁时不会自动断开连接,因为它是一个没有 QObject 的函子。然而,从 5.2 开始有一个重载,它添加了一个 "context object"。当那个对象被销毁时,连接就断开了(上下文也用于线程亲和性:lambda 将在用作上下文的对象的事件循环的线程中调用)。
- 这是否意味着我不必再断开 lambda 与 Qt5.2 或更高版本的连接?
- 我必须传递该上下文还是自动完成?
当通过 QObject::~QObject() 销毁对象时,Qt 会自动删除对象的所有连接。因此,如果您创建到 lambda 的连接,当发送对象被删除时,连接会自动清除。您没有,以前也不需要自己断开连接。
当您需要对连接的生命周期进行更细粒度的控制时,将使用您所指的上下文对象。当您希望在销毁另一个对象(上下文对象)时删除连接时使用此方法。如果您需要在发送方被销毁之前这样做,这使得删除连接变得更容易。
总结:您不需要手动断开 lambda 的连接,它们会自动清理。您可以使用上下文对象在发送者对象被销毁之前删除连接。
在早期的 Qt 5 版本中,我必须断开 lambda 与信号的连接,如下所示:“Disconnecting lambda functions in Qt5”。
Here 我发现了以下语句: 当 'receiver' 被销毁时不会自动断开连接,因为它是一个没有 QObject 的函子。然而,从 5.2 开始有一个重载,它添加了一个 "context object"。当那个对象被销毁时,连接就断开了(上下文也用于线程亲和性:lambda 将在用作上下文的对象的事件循环的线程中调用)。
- 这是否意味着我不必再断开 lambda 与 Qt5.2 或更高版本的连接?
- 我必须传递该上下文还是自动完成?
当通过 QObject::~QObject() 销毁对象时,Qt 会自动删除对象的所有连接。因此,如果您创建到 lambda 的连接,当发送对象被删除时,连接会自动清除。您没有,以前也不需要自己断开连接。
当您需要对连接的生命周期进行更细粒度的控制时,将使用您所指的上下文对象。当您希望在销毁另一个对象(上下文对象)时删除连接时使用此方法。如果您需要在发送方被销毁之前这样做,这使得删除连接变得更容易。
总结:您不需要手动断开 lambda 的连接,它们会自动清理。您可以使用上下文对象在发送者对象被销毁之前删除连接。