Estaba investigando sobre QGraphicsScene y QGraphicsView, y no termino de enterarme de cómo hacer que al pasar el puntero del ratón sobre un QGraphicsItem éste haga algo.
Estas son las dos cosas que he intentado:
1.- En mi clase heredada de QGraphicsScene, implementar dentro de la función mouseMoveEvent la función itemAt(). De esta forma:
Código C++:
Ver original
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { ................. if (itemAt(event->scenePos(),QTransform())) { qDebug()<<"Algo"; } }
Pero siempre que muevo el ratón me muestra "Algo"
2.- En un QGraphicsItem heredado implementar las funciones virtuales
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
Así (para un objeto circulo heredado de un QGraphicsEllipseItem):
Código C++:
Ver original
void micirculo::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { this->setPen(QPen(Qt::yellow, 3, Qt::SolidLine)); qDebug()<<"Cambio a amarillo"; QGraphicsItem::hoverEnterEvent(event); } void micirculo::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { this->setPen(QPen(Qt::magenta, 3, Qt::SolidLine)); qDebug()<<"Cambio a rosa"; QGraphicsItem::hoverMoveEvent(event); } void micirculo::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { this->setPen(QPen(Qt::green, 3, Qt::SolidLine)); qDebug()<<"Cambio a verde"; QGraphicsItem::hoverLeaveEvent(event); }
En el QGraphicsView está activado el setMouseTracking:
Código C++:
Ver original
view->setMouseTracking(true);
Y en la clase micirculo tengo esto en el constructor:
Código C++:
Ver original
setAcceptHoverEvents(true);
Pero esto sólo funciona si presiono el botón del ratón sobre el objeto, y yo quiero que sea sólo al pasar el puntero sobre él
Saludos y gracias