8

これを読んで、次の 2 つの疑問が浮かびました。

1.それは言う

Python メソッドを Qt スロットとして明示的にマークする必要がある場合があります

私は常に @pyqtSlot デコレーターを使用していますが、それは次のように述べているためです。

デコレートされた Python メソッドにシグナルを接続すると、メモリの使用量が削減され、わずかに高速になるという利点もあります。

私は自問します:どの特定の場合に必要ですか?and: @pyqtSlot デコレータを使用しない利点はありますか?

2. result キーワード引数、その目的は何ですか?

@pyqtSlot(int, result=int)
def foo(self, arg1):
    """ C++: int foo(int) """

戻り値のタイプのように見えますが、シグナルを送信するときに戻り値を取得することはできません。

それについてのアイデアはありますか?

4

1 に答える 1

7
  1. PyQt アーキテクチャにより高速です。PyQt は、Qt フレームワークと通信するために、python スロットを C++ スロットに変換します。Python メソッドを Qt スロットとして明示的にマークし、C++ 署名を提供する場合、PyQt コードは C++ 署名自体を推測する必要はありません。これは既に指定されているためです。これにより、負荷の高いプロジェクトでのパフォーマンスが向上する場合があります。

  2. 戻り値は、スロットを通常の関数として呼び出したい場合にのみ必要です。

編集QMetaObject.invokeMethodメソッドはスロットを実行し、その戻り値を使用しているようです。

于 2012-06-30T10:33:31.570 に答える