将事件传递/转发到 Qt 中的子对象

2024-04-18

我正在开发 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 中,我正在抓取事件鼠标按下事件 at the View等级。在模式2中,我想在Image等级。在我超载之前鼠标按下事件在 View 类中,我能够获取所有事件Image。现在我正在捕捉View我无法在图像中获取鼠标事件。Image是私有的Scene我不想暴露它。

这里没有继承权;每个项目都是由其上方的对象创建的对象。

通读这个问题Qt——将事件传递给多个对象? https://stackoverflow.com/questions/1354877/qt-pass-events-to-multiple-objects看起来我想捕获鼠标事件Image水平并让它们返回;但是,我仍然需要创建鼠标按下事件 in View我很快就会回到原来的位置。

有没有办法在运行时打开/关闭事件处理并确保它们到达较低级别?或者有没有办法将事件转发到子对象?


有没有办法在运行时打开/关闭事件处理并确保它们到达较低级别?或者有没有办法将事件转发到子对象?

有一些可能性:

  1. Use QGraphicsScene::sendEvent(...) 将事件发送到项目。由于 scene() 可以通过该方法从任何项目访问scene()。也许这对你来说是一个解决方案。
  2. 您可以使用静态方法QCoreApplication::sendEvent(...) 做同样的工作。
  3. 事件过滤器可以完成这项工作,请参阅事件和事件过滤器章节.
  4. 您可以使用Graphicsview框架的特定安装事件系统(QGraphicsItem::sceneEventFilter(...) 和安装场景事件过滤器(...)

在运行时,可以使用 QGraphicsItem:: 方法关闭/打开鼠标事件设置接受鼠标按钮(...).

还有很多其他的可能性...

希望能帮助到你 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将事件传递/转发到 Qt 中的子对象 的相关文章

随机推荐