2013-02-15 50 views
3

有沒有一種方法可以輕鬆確定哪些插槽連接到PyQt4中的信號或對象?
主要的用例是連接給定對象的所有默認槽。例如,也許我想啓用排序QTableViewsetSortingEnabled(),但我想自己控制horizontalHeader().sortIndicatorChanged信號。我需要看看所有插槽連接到sortIndicatorChanged信號並斷開它們。搜索所有連接的信號到PyQt4對象

理想情況下,我想一個函數如下所示:

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')的調用將打印所有連接在my_table_model插槽dataChanged信號的插槽。

我認爲標準Qt將disconnect()的呼叫解釋爲自動斷開所有被調用信號的插槽。不幸的是,我不認爲PyQt4實現了這一點,信號必須逐個斷開。然而,我仍然希望能夠搜索一個對象,看看它有什麼插槽或信號,並打印/斷開它們等。

另外,我知道有一個QObject.receviers()方法可以返回數字'接收器'連接到給定的插槽。但是,這並不能告訴我這些接收器是誰/什麼。

回答

1

斷開工作就像在Qt中一樣。請參閱documentation for disconnect in pyQt

我不能找到一種方法,做你想做的,但你可以檢查的數獨爲:

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

你是對的。 'disconnect()'調用確實有效,就像在Qt中一樣。我可以發誓我在哪裏讀過,但事實並非如此,但是您在#1中引用的PyQt4文檔清楚地表明我錯了。 – 2013-02-18 14:16:44