QObject 提供了如下静态方法:
static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method);
disconnect 用于将对象发送方中的信号与对象接收方的信号槽连接方法断开。如果成功断开,则返回 true,否则返回 false。
当涉及的任何对象被销毁时,将删除信号插槽连接。
disconnect() 通常以三种方式使用,如下面的示例所示:
- 断开一个对象所有连接到的信号:
disconnect(myObject, nullptr, nullptr, nullptr);
与之等效的非静态重载函数:
myObject->disconnect();
- 断开所有连接到指定信号的连接:
disconnect(myObject, SIGNAL(mySignal()), nullptr, nullptr);
与之等效的非静态重载函数:
myObject->disconnect(SIGNAL(mySignal()));
- 断开与特定接收者之间的连接:
disconnect(myObject, nullptr, myReceiver, nullptr);
与之等效的非静态重载函数:
myObject->disconnect(myReceiver);
nullptr 可以用作通配符,分别表示“任何信号”、“任何接收对象”或“接收对象中的任何插槽”。
我们可以发现:上述调用中发送者始终不能为空。也就是说,我们无法在一次调用中断开来自多个对象的信号。
如果 signal 指针为空(被指定为 nullptr),则断开接收者方法与发生者对象的所有信号的连接。否则,只有指定的信号被断开连接。
如果 receiver 指针是空的(被指定为 nullptr),将会断开任何连接到信号的槽。否则,将只断开与 receiver 有关的连接。
如果 method 指针为 nullptr,则断开与接收者的全部连接。如果不是,那么只有名为 method 指定的槽将被断开连接,其他所有插槽将保持连接。如果 receiver 指针是被指定为 nullptr 时, method 也必须同时为 nullptr,也就是说我们不允许通过不指定 receiver 的方式来断开所有名为 method 的槽。
网友评论