3

有没有办法轻松确定哪些插槽连接到 PyQt4 中的信号或对象?
主要用例是连接给定对象的所有默认插槽。例如,也许我想在QTableViewwith上启用排序,setSortingEnabled()但我想自己控制horizontalHeader().sortIndicatorChanged信号。我需要查看所有插槽都连接到sortIndicatorChanged信号并断开它们。

理想情况下,我想要一个如下功能:

def print_all_connected(qobject, signal=None):
    signals = qobject.signals() if signal is None: else [signal]
    for signal in qobject.signals():
        for slot in qobject.connectedSlots():
            print slot

所以像这样的调用print_all_connected(my_table_model, 'dataChanged')将打印连接到插槽上dataChanged信号的所有my_table_model插槽。

我认为标准 Qt 将调用解释disconnect()为自动断开所有插槽的信号,以便调用它。不幸的是,我不认为 PyQt4 实现了这一点,信号必须一一断开。但是,我仍然希望能够搜索一个对象并查看它具有哪些插槽或信号并打印/断开它们等。

另外,我知道有一种QObject.receviers()方法可以返回连接到给定插槽的“接收器”数量。但是,这并不能告诉我这些接收者是谁/是什么。

4

1 回答 1

1

断开连接就像在 Qt 中一样工作。请参阅pyQt 中的断开连接文档

我找不到做你想做的事的方法,但你可以检查 doku:

  1. 新型信号槽支持
  2. 旧式信号和插槽支持
  3. 需要注意的事项
于 2013-02-17T12:15:30.770 回答