在早期的Qt 5版本中,我必须将lambdas与信号断开,如下所示:" Disconnecting lambda functions in Qt5"。
Here我发现了以下声明: 接收器'时没有自动断开连接。被破坏是因为它是没有QObject的仿函数。但是,由于5.2存在重载,它会添加一个"上下文对象"。当该对象被销毁时,连接被破坏(上下文也用于线程关联:lambda将在用作上下文的对象的事件循环的线程中调用)。
答案 0 :(得分:11)
当通过QObject::~QObject()销毁对象时,Qt会自动删除与对象之间的所有连接。因此,如果创建与lambda的连接,则删除发送对象时,将自动清除连接。你没有,以前也没有,自己断开它。
当您需要对连接的生命周期进行更细粒度的控制时,将使用您引用的上下文对象。当您希望在销毁另一个对象(上下文对象)时删除连接时使用此方法。如果您需要在发件人销毁之前删除连接,这样可以更轻松地删除连接。
总结:您无需手动断开lambda,它们会自动清除。您可以在销毁发件人对象之前使用上下文对象删除连接。