Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/08/2016, 09:37
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 10 meses
Puntos: 27
Respuesta: Qt. Detectar item al pasar el ratón sobre él

Con respecto al primer modelo has de tener en cuenta que el QGraphicsSceneMouseEvent tiene varios métodos relacionados con la posición:
  • pos(), que devuelve una posición con respecto al item en el que se encuentren.
  • scenePos(), que devuelve una posición con respecto a la escena en la que te encuentres. Este es el que quieres usar.
  • screenPos(), que devuelve la posición con respecto a la pantalla en la que se ejecuta.

Resumen, cambia pos() por scenePos() y listo. No obstante, te dejo un widget básico que funcione de manera similiar

Código C++:
Ver original
  1. #include <QDebug>
  2.  
  3. #include <QGraphicsItem>
  4. #include <QGraphicsView>
  5. #include <QGraphicsScene>
  6. #include <QGraphicsSceneMouseEvent>
  7. #include <QGraphicsSimpleTextItem>
  8.  
  9. class xscene : public QGraphicsScene {
  10.   public:
  11.     explicit xscene(QWidget * parent = nullptr) : QGraphicsScene(parent) {
  12.       ui_text = new QGraphicsSimpleTextItem("Texto de prueba");
  13.       addItem(ui_text);
  14.     }
  15.   private:
  16.  
  17.     void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {
  18.       if (itemAt(event->scenePos(),QTransform()))
  19.         qDebug() << "Hay algo aquí";
  20.  
  21.       QGraphicsScene::mouseMoveEvent(event);
  22.     }
  23.  
  24.     QGraphicsSimpleTextItem* ui_text;
  25. };
  26.  
  27. class widget : public QGraphicsView
  28. {
  29.     Q_OBJECT
  30. public:
  31.     explicit widget(QWidget* parent = nullptr) : QGraphicsView(parent) {
  32.       setMouseTracking(true);
  33.       myScene = new xscene(this);
  34.       setScene(myScene);
  35.  
  36.     }
  37.  
  38. private:
  39.     xscene* myScene;
  40. };