我正在研究MAC OS X / Qt 5.3小部件应用程序,但我遇到了问题。我有QGraphicsView
包含可移动QGraphicsEllipseItem
的场景,但我不知道如何捕捉移动事件的结束。
我尝试做的是每次一个点的拖动事件结束时触发一个方法(如果不可能,那么当它移动时),但我不知道从哪里开始或者该怎么办。我不想自己实施QGraphicsEllipseItem
,但如果它是我唯一可能需要帮助的选项。
问题还在于我不知道在哪里听这些事件,我有一个类将点插入到小部件中,通常作为它的代码隐藏,我想要抓住那里,因为可以从那里访问该方法并从中获取特定数据。我完全不知道该做什么或怎么做。
我不想要完整的代码,但是如果可以的话,我会感激一个例子(指定位置)
答案 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
。