有沒有一種方法可以輕鬆確定哪些插槽連接到PyQt4中的信號或對象?
主要的用例是連接給定對象的所有默認槽。例如,也許我想啓用排序QTableView
與setSortingEnabled()
,但我想自己控制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()
方法可以返回數字'接收器'連接到給定的插槽。但是,這並不能告訴我這些接收器是誰/什麼。
你是對的。 'disconnect()'調用確實有效,就像在Qt中一樣。我可以發誓我在哪裏讀過,但事實並非如此,但是您在#1中引用的PyQt4文檔清楚地表明我錯了。 – 2013-02-18 14:16:44