【问题标题】:Searching all connected signals to PyQt4 object搜索所有连接到 PyQt4 对象的信号
【发布时间】: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() 方法可以返回连接到给定插槽的“接收器”的数量。但是,这并不能告诉我这些接收者是谁/是什么。

【问题讨论】:

    标签: pyqt pyqt4


    【解决方案1】:

    Disconnect 的工作方式与 Qt 中的一样。请参阅documentation for disconnect in pyQt。

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

    1. New-style Signal and Slot Support
    2. Old-style Signal and Slot Support
    3. Things to be Aware Of

    【讨论】:

    • 你是对的。 disconnect() 调用确实像在 Qt 中一样工作。我本可以发誓我在某处读到的情况并非如此,但您在 #1 中引用的 PyQt4 文档清楚地表明我错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多