pyqt graphicsitem мышь войти в событие - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь подключиться к событию ввода мышью QGraphicsItems, которые помещаются в QGraphicsScene и визуализируются через QGraphicsView.Из того, что я понимаю, метод для переопределения для этого - dragEnterEvent в классе, производном от QGraphicsItem (или одного из его подклассов).Моя попытка выглядит следующим образом:

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 ().

1 Ответ

0 голосов
/ 04 апреля 2011

(Частичное) решение было таким:

self.group.setHandlesChildEvents(False)     

Это гарантирует, что отдельные элементы обрабатывают свои собственные события, кажется, что до того, как группа их захватила.

У меня все еще есть проблема в том, что мой GraphicsView переопределяет mouseMoveEvent, и когда он включен, никакие события не передаются элементам сцены.

РЕДАКТИРОВАТЬ: И, похоже, решение этой второй проблемы состояло в том, чтобы вызвать обработчик mouseMoveEvent базового класса из обработчика Views mouseMoveEvent, например,

def mouseMoveEvent(self,event):
    QtGui.QGraphicsView.mouseMoveEvent(self, event)
...