私はかなり複雑な QGraphicsView/Scene セットアップを使用しており、複雑な相互作用を持つアイテムがあります。
そのため、既存の機能にバグを作成しないように、これを単体テストしたいと考えています。あるテストでは、次のことを行います。
- シーン内の項目の上でマウスを押します
- マウスを右に移動
- マウスを放します
これにより、アイテムが選択され、正しい量だけ移動され、選択が解除されたことを確認できます。
ただし、mouseMove イベントを送信した後、マウスの状態が「解放」になることがわかりました。これが私のコードです。
QTest.mousePress(gv.viewport(), Qt.LeftButton, Qt.NoModifier, QPoint(80,80), 100)
QTest.mouseMove(gv.viewport(), QPoint(80,80), 200)
QTest.mouseMove(gv.viewport(), QPoint(90,80), 300)
QTest.mouseMove(gv.viewport(), QPoint(100,80), 400)
QTest.mouseRelease(gv.viewport(), Qt.LeftButton, Qt.NoModifier, QPoint(80,80), 900)
gv は QGraphicsView です。
問題は、QGraphicsItem によって mouseMove イベントが hoverMoveEvents として表示されることです。これは mouseMoveEvent として表示されるはずです。
ドキュメントによると:
http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#setAcceptHoverEvents
これらのシミュレートされたイベントは「マウス グラバー アイテム」を設定していないように見えますか?
関連している:
qt グラフィックス ビューのウィジェット/アイテムを単体テストする方法
編集:
TLDR; 偽のマウス イベントが現在のマウス グラバー アイテムを設定しないのはなぜですか? これにより、QGraphicsItems は mouseMove イベントではなく mouseHover イベントを取得します。