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
disconnect()
標準の Qt は、呼び出しを、それが呼び出されたシグナルのすべてのスロットの自動切断として解釈すると思います。残念ながら、PyQt4 はこれを実装していないと思います。シグナルを 1 つずつ切断する必要があります。ただし、オブジェクトを検索して、それが持つスロットまたは信号を確認し、それらを印刷/切断するなどを行うことができるようにしたいと考えています。
さらにQObject.receviers()
、特定のスロットに接続されている「レシーバー」の数を返すことができるメソッドがあることを知っています。ただし、これは、それらの受信者が誰/何であるかを教えてくれません。