Hola:
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 originalvoid 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 originalvoid 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:
Y en la clase micirculo tengo esto en el constructor:
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