有没有办法轻松确定哪些插槽连接到 PyQt4 中的信号或对象?
主要用例是连接给定对象的所有默认插槽。例如,也许我想在QTableView
with上启用排序,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()
方法可以返回连接到给定插槽的“接收器”数量。但是,这并不能告诉我这些接收者是谁/是什么。