我擁有相當複雜的QGraphicsView /場景設置在那裏的我有複雜的相互作用項目。的Qt的QGraphicsView單元測試 - 如何讓鼠標在「按下」狀態?
因此我想單元測試是爲了避免在已經存在的功能產生錯誤。對於一個測試,我想:
- 按下鼠標按下場景中的一個項目
- 將鼠標移動到右側
- 鬆開鼠標
這將讓我檢查該項目被選擇,通過正確的量移動,並且被取消選擇。
不過,我發現,發送的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 hoverMoveEvents - 它應該被視爲一個mouseMoveEvent!
根據文檔:
http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#setAcceptHoverEvents
所以它似乎是這些模擬事件沒有設置「鼠標抓取項目」?
相關:
How to unit test qt graphics view widgets/items
編輯:
TLDR;爲什麼我的假鼠標事件沒有設置當前的鼠標抓取器項目?這將導致QGraphicsItems得到mouseHover事件,而不是mousemove事件時。
http://qt.gitorious.org/qt/qt/blobs/51be60532af93ac6526e76db4085283465c5baa6/tests/auto/qgraphicsview/tst_qgraphicsview.cpp可能會yeild我的答案..進一步調查要求 – paulm 2013-05-01 21:16:15