QGraphicsEllipseItem如何捕捉事件

QGraphicsEllipseItem how to catch events

本文关键字:事件 何捕捉 QGraphicsEllipseItem      更新时间:2023-10-16

我正在使用MAC OS X/Qt 5.3小部件应用程序,我遇到了一个问题。我有QGraphicsView包含场景与可移动的QGraphicsEllipseItem,但我不知道如何捕捉移动事件的结束。

我想做的是每次点的拖动事件结束时触发一个方法(如果这是不可能的,那么当它移动时),但我不知道从哪里开始或做什么。我宁愿不做我自己的QGraphicsEllipseItem实现,但如果这是唯一的选择,我可能需要一个手与它。

问题是我也不知道在哪里听这些事件,我有一个类,插入点到小部件,通常作为一个代码背后为它,我想做捕捉那里,因为方法可以从那里访问,并从它获得特定的数据。我完全不知道该做什么或怎么做。
我不想要完整的代码,但如果可以的话,我希望能提供一个示例(指定位置)。

正如@SebastianLange所评论的,您需要处理鼠标事件。基于相同的方法,有两种方法可以做到这一点。

A QGraphicsItem支持以下功能:

virtual void    mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
virtual void    mousePressEvent ( QGraphicsSceneMouseEvent * event )
virtual void    mouseReleaseEvent ( QGraphicsSceneMouseEvent * event )

第一个方法将继承QGraphicsEllipseItem并覆盖mouseEvent s,这将允许您知道项目何时被移动,并且调用mouseReleaseEvent信号表明移动已经结束。

如果你不想继承QGraphicsEllipseItem,另一种方法是安装一个场景事件过滤器

这包括创建一个从QGraphicsItem派生的单独对象,重载鼠标事件(如上所述),然后将该对象安装为QGraphicsEllipseItem对象的事件过滤器。

就我个人而言,我建议使用第一种方法并继承QGraphicsEllipseItem