2010-10-02 21 views
3

Je veux détecter lorsque le curseur de la souris se déplace sur QGraphicsItem lorsqu'un bouton de la souris est enfoncé, c'est-à-dire que le bouton est enfoncé avant que la souris n'entre dans l'élément. Ma première idée était d'utiliser hoverEnterEvent, mais il ne semble pas se déclencher lorsque le bouton gauche de la souris est enfoncé. Mon autre idée était d'utiliser dragEnterEvent, mais cela ne semble pas déclencher du tout (même si j'ai utilisé setAcceptDrops(True)Détecter lorsque la souris entre dans QGraphicsItem avec le bouton enfoncé

Quelle est la meilleure façon de détecter quand le curseur se déplace sur un élément et le bouton de la souris est pressé?

+0

Vous pourriez avoir à filtrer les événements de souris au graphisme niveau de la scène, et ajouter un peu de notification à chaque widget de la souris est terminée. Cependant, j'aurais pensé que les traînées auraient dû marcher. –

+0

Je suis confronté au même problème. Voudrait entendre une réponse. Va vérifier les événements de glisser. – problemofficer

Répondre

0

Essayez le mouseMoveEvent() et mousePressEvent(). S'ils ne vous aident pas alors vous aurez besoin de réimplémenter méthode virtuelle

bool QGraphicsItem::sceneEvent (QEvent * event) 

Vérifiez la état du bouton de la souris à l'intérieur et appeler le gestionnaire d'événements approprié.

2

Je viens de trouver cette question, je sais que c'est vieux, mais j'espère que ma réponse sera utile pour quelqu'un avec ce problème.

Dans la QGraphicsView ou QGraphicsScene classe dérivée substituez la méthode mouseMoveEvent et vérifier buttons propriété de l'événement pour savoir quels boutons sont actuellement pressé. Voici un exemple de code dans PyQt4 d'un petit projet, je travaille sur:

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)