【发布时间】:2015-01-12 18:11:51
【问题描述】:
我很想知道是否有某种方法可以确定是否存在与我在类中定义的给定信号的连接。它基本上是一个处理数据的信号,我不在乎它连接到什么,但我想包括一个健全性检查,即我没有将数据发送到永远不会被看到的空间中。我已经查看了Determine signals connected to a given slot in Qt,但这是一个相反的问题。
【问题讨论】:
我很想知道是否有某种方法可以确定是否存在与我在类中定义的给定信号的连接。它基本上是一个处理数据的信号,我不在乎它连接到什么,但我想包括一个健全性检查,即我没有将数据发送到永远不会被看到的空间中。我已经查看了Determine signals connected to a given slot in Qt,但这是一个相反的问题。
【问题讨论】:
QObject::isSignalConnected() 正是用于该用例 - 避免在无人收听时准备发射信号的不必要工作。它的API docs 甚至还有一个很好的例子。
示例:
static const QMetaMethod valueChangedSignal = QMetaMethod::fromSignal(&MyObject::valueChanged);
if (isSignalConnected(valueChangedSignal)) {
QByteArray data;
data = get_the_value(); // expensive operation
emit valueChanged(data);
}
【讨论】:
QObject 被销毁时,这对我不起作用,而receivers(SIGNAL(finished()) 确实起作用