2010-10-02 4 views
3

Я хочу определить, когда курсор мыши перемещается в пределах QGraphicsItem при нажатии кнопки мыши, то есть кнопка нажимается до того, как мышь входит в элемент. Моя первая идея заключалась в использовании hoverEnterEvent, но при нажатии левой кнопки мыши она не срабатывает. Моя другая идея состояла в том, чтобы использовать dragEnterEvent, но он вообще не срабатывает (хотя я использовал setAcceptDrops(True).Определите, когда мышь вводит QGraphicsItem с кнопкой

Что лучше всего обнаружить, когда курсор перемещается над элементом и кнопкой мыши нажимается?

+0

Вы, возможно, придется фильтровать события мыши на уровне графика сцены, и добавить уведомление каждый виджет, что мышь закончилась. Однако я бы подумал, что события перетаскивания должны сработать. –

+0

Я столкнулся с той же проблемой. Хотелось бы услышать ответ. Будут проверять события перетаскивания. – problemofficer

ответ

0

Попробуйте mouseMoveEvent() и mousePressEvent(). Если они не помогут вам, то вам необходимо переопределить виртуальный метод

bool QGraphicsItem::sceneEvent (QEvent * event) 

Проверьте состояние кнопки мыши внутри и вызвать соответствующий обработчик события.

2

Я только что нашел этот вопрос, я знаю, что он старый, но я надеюсь, что мой ответ будет полезен кому-то с этой проблемой.

В 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)