2010-05-30 20 views
15

Ho una classe derivata da QGraphicsView, che contiene gli elementi -derived QGraphicsItem. Voglio che questi elementi per cambiare il colore ogni volta che il cursore del mouse passa sopra di loro, così ho implementato hoverEnterEvent (e hoverLeaveEvent):QGraphicsItem non riceve gli eventi di passaggio del mouse

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

Tuttavia, questo codice di gestore di eventi viene mai eseguito. Ho abilitato esplicitamente il tracciamento del mouse:

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

Ancora, senza fortuna. Che cosa sto facendo di sbagliato?

risposta

22

risolto. Devo usare setAcceptHoverEvents(true) nella funzione di costruzione della mia classe QGraphicsItem -derived.

+1

Ho avuto lo stesso problema e rimuovere l'implementazione 'mouseMoveEvent' dal mio' QGraphicsView' era anche necessario per risolverlo. Ora che ce l'ho fatta, probabilmente potrei aggiungere 'mouseMoveEvent' fino a quando non riuscirò a trovare un modo per non mangiare il' QEvent'. –

+0

Grazie mille! Hai appena terminato una grande sofferenza –

+0

@CoryKlein hai trovato il modo di utilizzare sia mouseMoveEvent che eventi hover? – lena

1

Nel mio caso, spostare gli eventi non funzionerebbero se ho calpestato mouseMoveEvent nel mio attuazione del classe QGraphicsView. Ho fissato questo aggiungendo una chiamata a

QGraphicsView::mouseMoveEvent(event); 

che propaga l'evento al genitore, che a sua volta inviato a tutti gli elementi di scena.

Problemi correlati