如何找出连接到信号的插槽
How can I find out what slot was connected to my signal?
使用 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]
返回连接到信号的接收器数。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- QObject::连接无法将信号连接到*this*对象的插槽
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 从 QWidgetList 访问 QWidget 子插槽/信号 (QList<QWidget*>)
- 两个对象QT之间的示例插槽/信号
- QT对象::连接:没有此类插槽信号到线程插槽
- Qt QAxWidget - WebBrowser手动设置插槽/信号
- 没有这样的插槽/信号(Qt)