Qt QML 杂记

Qt 拾遗 003 disconnect

2020-04-05  本文已影响0人  赵者也

QObject 提供了如下静态方法:

static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method);

disconnect 用于将对象发送方中的信号与对象接收方的信号槽连接方法断开。如果成功断开,则返回 true,否则返回 false。

当涉及的任何对象被销毁时,将删除信号插槽连接。

disconnect() 通常以三种方式使用,如下面的示例所示:

  1. 断开一个对象所有连接到的信号:
disconnect(myObject, nullptr, nullptr, nullptr);

与之等效的非静态重载函数:

myObject->disconnect();
  1. 断开所有连接到指定信号的连接:
disconnect(myObject, SIGNAL(mySignal()), nullptr, nullptr);

与之等效的非静态重载函数:

myObject->disconnect(SIGNAL(mySignal()));
  1. 断开与特定接收者之间的连接:
disconnect(myObject, nullptr, myReceiver, nullptr);

与之等效的非静态重载函数:

myObject->disconnect(myReceiver);

nullptr 可以用作通配符,分别表示“任何信号”、“任何接收对象”或“接收对象中的任何插槽”。

我们可以发现:上述调用中发送者始终不能为空。也就是说,我们无法在一次调用中断开来自多个对象的信号。

如果 signal 指针为空(被指定为 nullptr),则断开接收者方法与发生者对象的所有信号的连接。否则,只有指定的信号被断开连接。

如果 receiver 指针是空的(被指定为 nullptr),将会断开任何连接到信号的槽。否则,将只断开与 receiver 有关的连接。

如果 method 指针为 nullptr,则断开与接收者的全部连接。如果不是,那么只有名为 method 指定的槽将被断开连接,其他所有插槽将保持连接。如果 receiver 指针是被指定为 nullptr 时, method 也必须同时为 nullptr,也就是说我们不允许通过不指定 receiver 的方式来断开所有名为 method 的槽。

上一篇下一篇

猜你喜欢

热点阅读