Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/08/2016, 01:58
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Qt. Detectar item al pasar el ratón sobre él

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 original
  1. void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  2. {
  3. .................
  4. if (itemAt(event->scenePos(),QTransform()))
  5.     {
  6.         qDebug()<<"Algo";
  7.     }
  8. }

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
  1. void micirculo::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
  2. {
  3.     this->setPen(QPen(Qt::yellow, 3, Qt::SolidLine));
  4.     qDebug()<<"Cambio a amarillo";
  5.     QGraphicsItem::hoverEnterEvent(event);
  6. }
  7.  
  8. void micirculo::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
  9. {
  10.     this->setPen(QPen(Qt::magenta, 3, Qt::SolidLine));
  11.     qDebug()<<"Cambio a rosa";
  12.     QGraphicsItem::hoverMoveEvent(event);
  13. }
  14.  
  15. void micirculo::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
  16. {
  17.     this->setPen(QPen(Qt::green, 3, Qt::SolidLine));
  18.     qDebug()<<"Cambio a verde";
  19.     QGraphicsItem::hoverLeaveEvent(event);
  20. }

En el QGraphicsView está activado el setMouseTracking:
Código C++:
Ver original
  1. view->setMouseTracking(true);

Y en la clase micirculo tengo esto en el constructor:
Código C++:
Ver original
  1. 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
__________________
Mi calculadora en Qt