我正在研究Qt应用程序,我遇到了将鼠标事件发送到我需要的问题。
这是我所拥有的高级视图(每个级别还有其他事情需要视图和场景):
+----------------
| App Window -- QMainWindow
| +--------------
| | View -- QGraphicsView --- Grabbing mouse events here for Mode 1
| | +------------
| | | Scene -- QGraphicsScene
| | | +----------
| | | | Image -- QGraphicsPixmap --- Want to grab mouse events here for Mode 2
| | | |
在模式1中,我在 View 级别抓取 mousePressEvent 事件。在模式2中,我想在 Image 级别抓取鼠标事件。在我在View类中重载 mousePressEvent 之前,我能够获取 Image 中的所有事件。现在我正在 View 捕获我无法在Image中获取鼠标事件。 图像在 Scene 中是私有的,我不想公开它。
这里没有继承权;每个项目都是由其上方的对象创建的对象。
通过这个问题Qt -- pass events to multiple objects?阅读,似乎我想在 Image 级别捕获鼠标事件并让它们重新启动;但是,我仍然需要在 View 中创建 mousePressEvent ,我会回到原来的位置。
有没有办法在运行时打开/关闭事件处理并确保它们到达较低级别?或者有没有办法将事件转发给子对象?
答案 0 :(得分:5)
有没有办法在运行时打开/关闭事件处理并确保它们到达较低级别?或者有没有办法将事件转发给子对象?
有一些可能性:
在运行时,可以使用方法QGraphicsItem :: setAcceptedMouseButtons (...)关闭/打开鼠标事件。
还有许多其他可能性......
希望它有所帮助!