我有一个QGraphicsScene,QGraphicsView和一些QGraphicsItems子类。 我想跟踪哪个项目在光标最上方可见。 在大多数情况下,使用hoverEnterEvent可以很好地工作,但是如果我有两个对象,其中一个对象位于另一个对象之上,则确实可以同时输入两个对象,但不能离开内部对象(并重新进入外部对象,因为它从未在内部离开外部对象)第一名)。
+-------------------------------------+
outside | |
| outer |
| |
| |
| +-------------+ | +-------------+
| | | | | |
| | | | | another |
| | inner | | | |
| | | | | |
| | | | +-------------+
| +-------------+ |
| |
| |
| |
| |
+-------------------------------------+
outside -> outer : works, outer is selected
outside -> outer -> outside -> another : works, first outside is selected, than nothing, than another
outer -> inner : works, inner is seletected
outside -> outer -> inner -> outer: does not work, first outside is selected, than inner, but than nothing (should be outer again)
除了循环通过hoverLeaveEvent的轻微延迟单触发触发的所有图形项目外,我还能做什么?
编辑:
我找到了一个临时解决方案:
我添加了一个全局QList
答案 0 :(得分:0)
您的QGraphicsItem
位于QGraphicsScene
中,可以由一个或多个 QGraphicsView
s显示。
我知道模型视图映射通常是1:1。
仍然建议您在视图中而不是在场景中实现这样的鼠标处理:
在eventFilter
上安装graphicsView->viewport()
。
覆盖过滤器类中的eventFilter()
函数。
根据需要,注意QEvent::MousePress
,MouseMove
,MouseRelease
,也许是Enter
和Leave
。
可能您需要在视口上setMouseTracking(true)
。
然后,在事件过滤器功能中,使用QGraphicsView::mapToScene()
和QGraphicsScene::itemAt()
查找最高的项目,或使用::items()
查找光标下方的所有项目。
最近,我通过在视图(QGraphicsView::drawForeground()
)上绘画来用边框装饰最上面的项目。