我正在尝试连接QGraphicsItems的鼠标输入事件,该事件放在QGraphicsScene上并通过QGraphicsView可视化。根据我的理解,为此覆盖的方法是从QGraphicsItem(或其中一个子类)派生的类中的dragEnterEvent。我的尝试看起来像这样:
class StaPoly(QtGui.QGraphicsPolygonItem):
def __init__(self,*args):
QtGui.QGraphicsPolygonItem.__init__(self,*args)
self.setAcceptDrops(True)
def dragEnterEvent(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)
我希望上面的片段能说清楚我要做的事情。请注意,显示的生成完全符合我的要求,没有问题 - 但是绘制的多边形没有响应enter事件 - 我没有看到任何证据表明正在调用dragEnterEvent()。
答案 0 :(得分:0)
(部分)解决方案是:
self.group.setHandlesChildEvents(False)
这确保了单个项目处理他们自己的事件,似乎在组捕获它们之前。
我仍有一个问题,我的GraphicsView会覆盖mouseMoveEvent,并且在启用时,没有事件传播到场景项。
编辑:似乎第二个问题的解决方案是从Views mouseMoveEvent处理程序调用基类mouseMoveEvent处理程序,例如。
def mouseMoveEvent(self,event):
QtGui.QGraphicsView.mouseMoveEvent(self, event)