【发布时间】:2013-04-24 08:48:01
【问题描述】:
我有一个相当复杂的 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。
问题似乎是 mouseMove 事件被 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 事件。
【问题讨论】:
-
qt.gitorious.org/qt/qt/blobs/… 可能会给出我的答案.. 需要进一步调查
标签: c++ qt4 pyqt qgraphicsview