【发布时间】:2015-08-20 17:34:26
【问题描述】:
我有一个 QObject A,它连接到另一个 QObject B。现在我希望 A 连接到 C,第三个 QObject 并与 B 完全断开连接。
简单易懂!问题是我有很多 A,每个都有自己的一组信号和插槽(B/C 更通用)。到目前为止,我一直在为每种不同的类类型手动创建连接和断开连接方法。这些方法基本上是彼此的副本,将connect 交换为disconnect 调用,与don't repeat yourself 相悖。
所以我的问题是:以下功能是否可行?
void deleteAllConnections(QObject* someObject) {
// TODO disconnect all connections owned by someObject
// For bonus points: Is there a way of accessing the QMetaObject connected to?
}
我翻遍了QMetaObject、QObject 和Signals and Slots 文档,但都没有成功(尽管这通常不能保证......)。
【问题讨论】:
-
QObject::disconnect();doc.qt.io/qt-5/qobject.html#disconnect-5 -
@drescherjm 该文档指出
Disconnects all signals in this object from receiver's method.我正在阅读它,因为它将所有 this 对象的信号与 other 对象的插槽断开连接,但我'我仍然不确定它是否也将 other 对象的信号与 this 对象的插槽断开。 -
这是我的解决方案,只需保留对以前发件人的引用,并在需要时致电
disconnect。
标签: c++ qt qobject qmetaobject