代码之家  ›  专栏  ›  技术社区  ›  Thomas

我怎样才能知道哪个插槽连接到我的信号?

  •  5
  • Thomas  · 技术社区  · 7 年前

    使用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 . 期望是将一个插槽连接到 resolved signal总是准确地调用插槽一次,而不管承诺是已解决还是仍在等待。

    (我写的是我自己的承诺,而不是使用QFuture,因为没有文档和支持的方法来创建自己的QFuture对象,QFuture也不支持报告错误。)

    2 回复  |  直到 7 年前
        1
  •  0
  •   ch200c    7 年前

    如中所述 this answer 这不是一项容易的任务。根据你的情况,某种钩子机制就足够了。

        2
  •  -1
  •   doudouremi    7 年前

    你有这个功能

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

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