【问题标题】:Determine if a slot is connected to a given signal确定插槽是否连接到给定信号
【发布时间】:2015-01-12 18:11:51
【问题描述】:

我很想知道是否有某种方法可以确定是否存在与我在类中定义的给定信号的连接。它基本上是一个处理数据的信号,我不在乎它连接到什么,但我想包括一个健全性检查,即我没有将数据发送到永远不会被看到的空间中。我已经查看了Determine signals connected to a given slot in Qt,但这是一个相反的问题。

【问题讨论】:

    标签: c++ qt signals


    【解决方案1】:

    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()) 确实起作用
    • Qt 5.15.0 QObject::isSignalConnected 总是返回 false?
    猜你喜欢
    • 2011-02-14
    • 2012-04-09
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多