【发布时间】:2013-01-31 17:34:28
【问题描述】:
有没有办法在 PyQt4 中轻松确定哪些插槽连接到信号或对象?
主要用例是连接给定对象的所有默认插槽。例如,也许我想用setSortingEnabled() 对QTableView 启用排序,但我想自己控制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() 方法可以返回连接到给定插槽的“接收器”的数量。但是,这并不能告诉我这些接收者是谁/是什么。
【问题讨论】: