如何找出连接到信号的插槽

How can I find out what slot was connected to my signal?

本文关键字:插槽 信号 何找出 连接      更新时间:2023-10-16

使用 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 不支持报告错误。

正如本答案中所解释的,这不是一件容易的事。 根据您的情况,某种挂钩机制可能就足够了。

你有函数

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

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