6

私はかなり複雑な QGraphicsView/Scene セットアップを使用しており、複雑な相互作用を持つアイテムがあります。

そのため、既存の機能にバグを作成しないように、これを単体テストしたいと考えています。あるテストでは、次のことを行います。

  1. シーン内の項目の上でマウスを押します
  2. マウスを右に移動
  3. マウスを放します

これにより、アイテムが選択され、正しい量だけ移動され、選択が解除されたことを確認できます。

ただし、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 イベントを取得します。

4

1 に答える 1