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#include <QDebug>
#include <QGraphicsItem>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsSimpleTextItem>
class xscene : public QGraphicsScene {
public:
explicit xscene(QWidget * parent = nullptr) : QGraphicsScene(parent) {
ui_text = new QGraphicsSimpleTextItem("Texto de prueba");
addItem(ui_text);
}
private:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {
if (itemAt(event->scenePos(),QTransform()))
qDebug() << "Hay algo aquí";
QGraphicsScene::mouseMoveEvent(event);
}
QGraphicsSimpleTextItem* ui_text;
};
class widget : public QGraphicsView
{
Q_OBJECT
public:
explicit widget(QWidget* parent = nullptr) : QGraphicsView(parent) {
setMouseTracking(true);
myScene = new xscene(this);
setScene(myScene);
}
private:
xscene* myScene;
};