2017-08-04 9 views
0

Il y a déjà des discussions à ce sujet, mais la solution que j'ai pu trouver ne fonctionne pas. Solution: en écrivant QGraphicsView::MousePressEvent(event); à la fin de ma classe MousePressEvent dans la classe dérivée de QGraphicsView. Les deux ne fonctionnent pas. La classe QGraphicsItem ne reçoit pas les événements de la souris. Ceci est mon mousePressEvent dans ma classe QGraphicsView:Comment recevoir des événements de souris dans la classe dérivée QGraphicsItem? Qt

void GraphWidget::mousePressEvent(QMouseEvent *event){ 
    mousePressed = true; 

    if (event->button() == Qt::RightButton) // doesn't matter 
    { 
     rightMousePressed = true; 
     _panStartX = event->x(); 
     _panStartY = event->y(); 
     setCursor(Qt::ClosedHandCursor); 
     event->accept(); 
     return; 
    } 

    // And I tried this: QGraphicsView::mousePressEvent(event); 
} 

Ceci est mon mousePressEvent dans ma classe QGraphicsItem:

void Node::mousePressEvent(QGraphicsSceneMouseEvent *event){ 
    mousePressed = true; 
    qDebug() << "mouse trigered!"; 
} 

Toutes les idées, ce que je l'ai oublié?

+0

Appelez-vous "QGraphicsView :: mousePressEvent (event);" dans la fonction mousePressEvent de votre classe graphicsview? Vérifiez également si la fonction boundingRect() est implémentée correctement dans votre classe graphicsitem. –

Répondre

0

RÉPONSE Ne jamais oublier d'appeler

QGraphicsView::mousePressEvent(event);/
QGraphicsView::mouseReleaseEvent(event);/
QGraphicsView::mouseMoveEvent(event); 
... 

à la fin de chaque mouseEvent vous dans votre classe redéfini dérivée de QGraphicsView (dans le mouseMoveEvent utiliser QGraphicsView :: mouseMoveEvent (événement) et ainsi de suite). Sinon, des choses vraiment étranges peuvent arriver. De même, si vous n'en avez même pas utilisé dans votre classe dérivée QGraphicsItem, appelez-la dans tous les cas.