2010-05-30 23 views
15

J'ai une classe dérivée de QGraphicsView, qui contient QGraphicsItem -éléments dérivés. Je veux que ces éléments changent de couleur lorsque le curseur de la souris sur eux, donc je mis en œuvre hoverEnterEvent (et hoverLeaveEvent):QGraphicsItem ne reçoit pas les événements de survol de la souris

void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) 
{ 
    update (boundingRect()); 
} 

Cependant, ce code de gestionnaire d'événements est jamais exécuté. J'ai explicitement activé le suivi de la souris:

MyGraphicsView::MyGraphicsView(MainView *parent) : 
    QGraphicsView(parent) 
{ 
    setMouseTracking(true); 
    viewport()->setMouseTracking(true); 
    ... 
} 

Toujours pas de chance. Qu'est-ce que je fais mal?

Répondre

22

L'a corrigé. J'ai besoin d'utiliser setAcceptHoverEvents(true) dans le constructeur de ma classe dérivée QGraphicsItem.

+1

J'ai eu le même problème et la suppression de l'implémentation 'mouseMoveEvent' de mon' QGraphicsView' était également nécessaire pour le réparer. Maintenant que je l'ai fonctionné, je pourrais probablement rajouter 'mouseMoveEvent' tant que je trouverai un moyen de ne pas manger le' QEvent'. –

+0

Merci beaucoup! Vous venez de terminer une grande souffrance –

+0

@CoryKlein avez-vous trouvé le moyen d'utiliser les événements mouseMoveEvent et hover? – lena

1

Dans mon cas, planent les événements ne fonctionneraient pas si je l'emporterait sur mouseMoveEvent dans ma mise en œuvre de la classe QGraphicsView. Je fixe en ajoutant un appel à

QGraphicsView::mouseMoveEvent(event); 

qui propage l'événement au parent, ce qui l'a envoyé à tous les éléments de la scène.