当鼠标按下按钮进入QGraphicsItem时检测到

问题描述:

我想要在鼠标按钮被按下时检测鼠标光标在QGraphicsItem上的移动,即在鼠标进入项目之前按下该按钮。我的第一个想法是使用hoverEnterEvent,但它似乎没有按下鼠标左键时触发。我的另一个想法是使用dragEnterEvent,但它似乎根本没有触发(即使我已经使用setAcceptDrops(True)当鼠标按下按钮进入QGraphicsItem时检测到

什么是最好的方式来检测当光标在项目顶部移动和鼠标按钮按下?

+0

您可能必须在图形场景级别过滤鼠标事件,并为每个小部件添加一些鼠标停止的通知。但是,我会认为拖动事件应该已经奏效。 – 2010-10-04 18:24:58

+0

我面临同样的问题。希望听到答案。将结帐拖动事件。 – problemofficer 2010-11-17 06:07:29

尝试mouseMoveEvent()mousePressEvent()。如果他们不帮你,那么你就需要重新实现虚方法

bool QGraphicsItem::sceneEvent (QEvent * event) 

检查鼠标按钮的状态里面并调用相应的事件处理程序。

我刚刚发现这个问题,我知道它已经很老了,但我希望我的回答对于有这个问题的人有用。

QGraphicsViewQGraphicsScene派生类覆盖mouseMoveEvent方法并检查事件的buttons属性以了解当前按下的按钮。以下是我正在处理的一个小型项目的PyQt4中的示例代码:

def mouseMoveEvent(self, event): 
    buttons = event.buttons() 
    pos = self.mapToScene(event.pos()) 
    object = self.scene().itemAt(pos) 

    type = EventTypes.MouseLeftMove if (buttons & Qt.LeftButton) else\ 
      EventTypes.MouseRightMove if (buttons & Qt.RightButton) else\ 
      EventTypes.MouseMidMove if (buttons & Qt.MidButton) else\ 
      EventTypes.MouseMove 

    handled = self.activeTool().handleEvent(type, object, pos) 

    if (not handled): 
     QGraphicsView.mouseMoveEvent(self, event)