3

PyQt4 の信号またはオブジェクトに接続されているスロットを簡単に判断する方法はありますか?
これの主な使用例は、特定のオブジェクトのすべてのデフォルト スロットを接続することです。たとえば、QTableViewwith で並べ替えを有効にしたいが、自分でシグナル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')接続されているすべてのスロットを出力します。dataChangedmy_table_model

disconnect()標準の Qt は、呼び出しを、それが呼び出されたシグナルのすべてのスロットの自動切断として解釈すると思います。残念ながら、PyQt4 はこれを実装していないと思います。シグナルを 1 つずつ切断する必要があります。ただし、オブジェクトを検索して、それが持つスロットまたは信号を確認し、それらを印刷/切断するなどを行うことができるようにしたいと考えています。

さらにQObject.receviers()、特定のスロットに接続されている「レシーバー」の数を返すことができるメソッドがあることを知っています。ただし、これは、それらの受信者が誰/何であるかを教えてくれません。

4

1 に答える 1

1

切断は Qt と同じように機能します。pyQt での切断のドキュメントを参照してください。

ご希望の方法が見つかりませんでしたが、ドキュメントで次のことを確認できます。

  1. 新しいスタイルのシグナルとスロットのサポート
  2. 古いスタイルの信号とスロットのサポート
  3. 注意事項
于 2013-02-17T12:15:30.770 に答える