当鼠标按下按钮进入QGraphicsItem时检测到
问题描述:
我想要在鼠标按钮被按下时检测鼠标光标在QGraphicsItem
上的移动,即在鼠标进入项目之前按下该按钮。我的第一个想法是使用hoverEnterEvent
,但它似乎没有按下鼠标左键时触发。我的另一个想法是使用dragEnterEvent
,但它似乎根本没有触发(即使我已经使用setAcceptDrops(True)
。当鼠标按下按钮进入QGraphicsItem时检测到
什么是最好的方式来检测当光标在项目顶部移动和鼠标按钮按下?
答
尝试mouseMoveEvent()
和mousePressEvent()
。如果他们不帮你,那么你就需要重新实现虚方法
bool QGraphicsItem::sceneEvent (QEvent * event)
检查鼠标按钮的状态里面并调用相应的事件处理程序。
答
我刚刚发现这个问题,我知道它已经很老了,但我希望我的回答对于有这个问题的人有用。
在QGraphicsView
或QGraphicsScene
派生类覆盖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)
您可能必须在图形场景级别过滤鼠标事件,并为每个小部件添加一些鼠标停止的通知。但是,我会认为拖动事件应该已经奏效。 – 2010-10-04 18:24:58
我面临同样的问题。希望听到答案。将结帐拖动事件。 – problemofficer 2010-11-17 06:07:29