Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/12/2015, 15:36
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Qt. ¿Como propagar eventos de escena del raton a items?

Hola:

Ando enredando con el tema de QGraphicsView/QGraphicsScene/QGraphicsItem

He visto este ejemplo: http://www.walletfox.com/course/qgra...imedrawing.php
y siguiendo la idea he ido añadiendo items (circulos) y una cruceta tipo autoCAD

Pero ahora que me voy enterando de cómo funciona, he querido empezar a separar cosas.
Codigo fuente aquí

Ahora, el problema que tengo es que necesito que los eventos del ratón se me propaguen a los items, y no sé cómo hacerlo.

Por ejemplo, en el código que tengo y que se puede ver en el enlace, la cruceta son dos QGraphicsLineItem, que responden al movimiento del ratón así:
Código C++:
Ver original
  1. void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  2. {
  3.     ejeX->setLine(0,event->scenePos().y(),800,event->scenePos().y());
  4.     ejeY->setLine(event->scenePos().x(),0,event->scenePos().x(),600);
  5. ------------------
  6. (Aqui sigue actuando el evento)
  7. }

Ahora, cuando pretendo que la cruceta sea un objeto propio, sólo se me ocurre lo siguiente para propagar el evento al objeto Cursor:
Código C++:
Ver original
  1. void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  2. {
  3.    Cruceta->mouseMoveEvent(event);
  4. ------------------
  5. (Aqui sigue actuando el evento)
  6. }

Pero a esta "solución" le veo dos fallos:
1.- Me obliga a declarar los métodos de eventos en la clase Cursor (la clase que crea la cruceta) como públicos, cuando son métodos que debería ser protected, ya que son reimplementaciones de la clase QGraphicsItem
2.- No me acepta el método setMouseTracking(bool); , o al menos no funciona

Llevo toda la tarde viendo este ejemplo:
http://doc.qt.io/qt-5/qtwidgets-grap...e-example.html

Y hasta donde he podido entender, es el método QMouseMoveEvent de la propìa escena el que actúa de una u otra forma según el modo en el que esté (edicion, inserción, etc), lo que me lleva a pensar que lo que yo quiero debe de ser un error de diseño, o de concepto, y que supongo que no debería intentar ir por ahí.
Pero bueno, se aceptan sugerencias
Gracias como siempre
__________________
Mi calculadora en Qt