2010-05-30 14 views
15

Tengo una clase derivada de QGraphicsView, que contiene QGraphicsItem -deriva los elementos. Quiero que estos elementos cambian de color cada vez que el cursor del ratón pasa sobre ellos, por lo que he implementado hoverEnterEvent (y hoverLeaveEvent):QGraphicsItem no recibe eventos de desplazamiento del mouse

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

Sin embargo, este código de controlador de eventos nunca se ejecuta. He habilitado explícitamente el seguimiento del mouse:

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

Aún así, no hubo suerte. ¿Qué estoy haciendo mal?

Respuesta

22

Se arregló. Necesito usar setAcceptHoverEvents(true) en el constructor de mi clase QGraphicsItem -derivada.

+1

Tuve el mismo problema y también fue necesario eliminar la implementación 'mouseMoveEvent' de mi' QGraphicsView' para solucionarlo. Ahora que lo tengo funcionando, probablemente podría agregar 'mouseMoveEvent' nuevamente, siempre que encuentre una forma de que no se coman el' QEvent'. –

+0

¡Muchas gracias! Acabas de terminar con un gran sufrimiento –

+0

@CoryKlein ¿encontraste la forma de usar los eventos mouseMoveEvent y hover? – lena

1

En mi caso, se ciernen eventos no funcionarían si me hizo caso omiso de mouseMoveEvent en mi aplicación de la clase QGraphicsView. He arreglado esto añadiendo una llamada a

QGraphicsView::mouseMoveEvent(event); 

el que propaga el evento para los padres, que a su vez lo envió a todos los elementos de la escena.

Cuestiones relacionadas