如何确定哪个插槽连接了我的信号?

时间:2019-02-01 11:58:15

标签: c++ qt

使用Qt 5.11。通过覆盖QObject::connectNotify,可以通知我是否有插槽连接到我的信号:

    void connectNotify(const QMetaMethod &signal) override {
        if (signal == QMetaMethod::fromSignal(&PromiseBase::resolved()) && isResolved()) {
            // Here, I want to call the slot immediately.
        }
    }

发生这种情况时,我想立即调用插槽-仅调用该插槽,而不是可能连接到信号的所有其他插槽。 我该怎么做? Qt框架给了我信号,但没有给我信号。

上下文:我正在研究类似于JavaScript promises的Promise类。期望将插槽连接到resolved信号将始终只调用一次插槽,而不管承诺是否已解决或仍在等待中。

(我正在写自己的Promise而不是使用QFuture,因为没有记录和受支持的方式来创建自己的QFuture对象,并且QFuture不支持报告错误。)

2 个答案:

答案 0 :(得分:0)

this answer中所述,这并非易事。根据您的情况,某种挂钩机制可能就足够了。

答案 1 :(得分:-1)

您具有功能

int QObject::receivers ( const char * signal ) const [protected]

返回连接到信号的接收器数量。