megamic
1st April 2011, 02:06
I am trying to connect to the mouse-enter event of QGraphicsItems that are placed onto a QGraphicsScene and visualized through a QGraphicsView. From what I understand, the method to override for this is dragEnterEvent/hoverEnterEvent in a class derived from QGraphicsItem (or one of it's subclasses). My attempt looks like this:
class StaPoly(QtGui.QGraphicsPolygonItem):
def __init__(self,*args):
QtGui.QGraphicsPolygonItem.__init__(self,*args)
self.setAcceptDrops(True)
self.setAcceptHoverEvents(True)
self.setEnabled(True)
self.setActive(True)
def mouseMoveEvent(self,event):
print "Enter!"
def hoverEnterEvent(self,event):
print "Enter!" ...
...
def draw(self):
p = self.parent
self.group = QtGui.QGraphicsItemGroup(scene=p.scene)
...
for xpix in lons:
poly = QtGui.QPolygonF()
poly << QtCore.QPointF(xpix-symw,ypix)
poly << QtCore.QPointF(xpix,ypix+symh)
poly << QtCore.QPointF(xpix+symw,ypix)
poly << QtCore.QPointF(xpix,ypix-symh)
item = StaPoly(poly)
item.setPen(QtGui.QColor(color))
item.setBrush(QtGui.QColor(color))
self.group.addToGroup(item)
I hope the above snippets make it clear what I am trying to do. Note that the display is generated exactly as I desire, no issue there - however the polygons that get drawn are not responding to the enter-event - I am not seeing any evidence that dragEnterEvent() is being called.
Note that I am also setting up the GraphicsView to receive events as-well like this, and these mouse move events *are* being received OK:
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.scene = QtGui.QGraphicsScene()
self.setScene(self.scene)
self.setMouseTracking(True)
self.setInteractive(False)
...
def mouseMoveEvent(self,event):
...
Any advice on how to make this work?
class StaPoly(QtGui.QGraphicsPolygonItem):
def __init__(self,*args):
QtGui.QGraphicsPolygonItem.__init__(self,*args)
self.setAcceptDrops(True)
self.setAcceptHoverEvents(True)
self.setEnabled(True)
self.setActive(True)
def mouseMoveEvent(self,event):
print "Enter!"
def hoverEnterEvent(self,event):
print "Enter!" ...
...
def draw(self):
p = self.parent
self.group = QtGui.QGraphicsItemGroup(scene=p.scene)
...
for xpix in lons:
poly = QtGui.QPolygonF()
poly << QtCore.QPointF(xpix-symw,ypix)
poly << QtCore.QPointF(xpix,ypix+symh)
poly << QtCore.QPointF(xpix+symw,ypix)
poly << QtCore.QPointF(xpix,ypix-symh)
item = StaPoly(poly)
item.setPen(QtGui.QColor(color))
item.setBrush(QtGui.QColor(color))
self.group.addToGroup(item)
I hope the above snippets make it clear what I am trying to do. Note that the display is generated exactly as I desire, no issue there - however the polygons that get drawn are not responding to the enter-event - I am not seeing any evidence that dragEnterEvent() is being called.
Note that I am also setting up the GraphicsView to receive events as-well like this, and these mouse move events *are* being received OK:
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.scene = QtGui.QGraphicsScene()
self.setScene(self.scene)
self.setMouseTracking(True)
self.setInteractive(False)
...
def mouseMoveEvent(self,event):
...
Any advice on how to make this work?