PySide和PyQt采用Qt信号插槽机制,通过这种机制,我们可以将任何/多个信号连接到任何/多个插槽,只要散布的数据类型匹配。从信号中断开插槽
信令对象具有接收时隙的一些知识,例如,通过方法receivers
知道他们的号码,或者信号可以通过其disconnect
方法与接收插槽断开。
我的问题与反方向有关 - 例如,插槽是否知道它连接了哪些信号?插槽能否与信号断开?
更新:那么为什么我问这个 - 我有一个对象执行一些计算。计算由用户可编辑的Python表达式定义。表达式被解析并且必要的数据源从这个中被识别...计算对象(充当槽)然后连接到这些数据源(它们充当信号),并且一旦数据源产生/更新值,这个事实是用信号通知该插槽并重新评估表达式。当用户更改表达式时,需要再次解析并从现有信号(即数据源)断开连接并连接到新的数据源。你可以想象它就像Excel中连接到其他单元格的公式一样。
我知道有几种方法可以解决这个问题,例如手动跟踪连接(当然,这是额外的工作),或删除表达式对象并在每次更改时创建一个新连接(似乎还不够好,因为用户可能想要追溯计算数据源,这不会有帮助) 。但我很好奇,如果这可以纯粹使用简单的信号插槽机制解决。换句话说,我对任何解决方法都不感兴趣......我知道他们,并会使用他们我信号插槽在这里没有帮助。 :)
我不这么认为。但是,您可以手动跟踪连接和断开连接(例如,使用'QObject :: connect'的包装器)。 –
我认为必须有一些东西,因为当一个接收对象被删除时,必须通知它的一个接收器已经死了以停止发送信号给它。但是我还没有在文档中找到任何内容....当然,手动保持轨道是我的另一种选择。但是,如果Qt能够自动为我执行此操作,我希望避免双重工作。 –
我认为你问的是错误的问题。请解释你想要解决什么问题,不要问如何解决你对某个神秘问题的解决方案。寻求帮助时这是很常见的错误。为什么你需要知道插槽连接的位置?也许在这种情况下,您需要暂时断开连接信号来防止递归?为了防止可能的递归,有'blockSignals'方法。 –