0
私は信号が多くの情報を送信するPyQtでシグナルスロット配列を設定しようとしています。 QObject
の属性として送信したいさまざまな情報を設定して、QObject
をキャリアとして使用したいと考えています。理論的には、これはうまくいくはずです - オーバーロードがあり、送信者とQObject
を引数にとります。オブジェクトベースQSignalMapperのトラブル
ここで減少したコードです:
self.mapper = QtCore.QSignalMapper()
self.timeline.finished.connect(self.mapper.map)
carrier = QtCore.QObject()
carrier.contents = (item1, item2)
self.mapper.setMapping(self.timeline, carrier)
self.portalMapper.mapped.connect(self.report)
def report(self, carrierObject):
print 'Triggered'
残念ながら、それは動作しませんが。私はこの問題を、削除のプロセスによってsetMapping
関数にトレースしました。
QObject
をint
に切り替えると、この同じ方法がうまくいきます。また、QObject
に追加した属性とは何の関係もありません。新鮮なアウトオブボックスのQObject
を使用すると、同じ問題が発生します。
の具体的なものがあると思われますが、setMapping
の機能のオーバーロードはです。問題は何ですか?
QSignalMapperの使用には価値がありません。カスタム信号を定義し、データを直接送信してください。 – ekhumoro
私はそれを行う方法がわかりません、@ekhumoro ...私のコードが待っている信号は、Qt標準の 'QTimeline.finished'です。処理する前にタイマーが終了するのを待っているからです次のステップで私は 'finished()'信号を関数に代入してカスタム信号を送ることができますが、QSignalMapperの目的を要約すると、シグナルを受け取って新しいシグナルを送るだけではありません引数? – Grav
確かに - それはずっと簡単です。あなたのコードは本当にシグナルを送信する必要がありますか?あなたの例では、信号の消費者は1つだけです( '' self'')ので、シグナルの放射は完全に冗長であるように見えます。あなたがしているのは、データ自体ではなくオブジェクトへのポインタを送信することだけです(つまり、何もコピーされません)。データ自体への参照を 'self'の属性として保持しておき、' finished'シグナルに接続されたスロットで直接アクセスすることもできます。 – ekhumoro