QGraphicsEllipseItem如何捕获事件

时间:2014-07-28 09:25:27

标签: c++ qt qgraphicsview qgraphicsitem

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

我尝试做的是每次一个点的拖动事件结束时触发一个方法(如果不可能,那么当它移动时),但我不知道从哪里开始或者该怎么办。我不想自己实施QGraphicsEllipseItem,但如果它是我唯一可能需要帮助的选项。

问题还在于我不知道在哪里听这些事件,我有一个类将点插入到小部件中,通常作为它的代码隐藏,我想要抓住那里,因为可以从那里访问该方法并从中获取特定数据。我完全不知道该做什么或怎么做。
我不想要完整的代码,但是如果可以的话,我会感激一个例子(指定位置)

1 个答案:

答案 0 :(得分:1)

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

QGraphicsItem支持以下功能:

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

第一种方法是从QGraphicsEllipseItem继承并覆盖mouseEvent,这样可以让您知道项目何时被移动以及mouseReleaseEvent信号中的呼叫此举已经结束。

如果您不想继承QGraphicsEllipseItem,则另一种方法是install a scene event filter

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

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