The code is fine, but you need to enable Mousetracking and hoverEvents:
{
public:
Scene() {underMouse = 0;}
protected:
{
if (underMouse != 0)
{
underMouse->setPos(underMouse->pos() + mouseEvent->scenePos() - mouseEvent->lastScenePos());
qDebug() << mouseEvent->scenePos() - mouseEvent->lastScenePos();
}
}
{
if (underMouse == 0)
underMouse = itemAt(mouseEvent->scenePos());
else
underMouse = 0;
}
private:
};
{
public:
Piece() {
setAcceptHoverEvents(true);
}
{
painter->drawRect(boundingRect());
}
};
{
scene = new Scene();
Piece* piece = new Piece();
scene->addItem(piece);
graphicsView->setMouseTracking(true);
graphicsView->setScene(scene);
graphicsView->show();
graphicsView
->setGeometry
(QRect(50,
50,
500,
300));
this->setCentralWidget(graphicsView);
}
class Scene : public QGraphicsScene
{
public:
Scene() {underMouse = 0;}
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent )
{
if (underMouse != 0)
{
underMouse->setPos(underMouse->pos() + mouseEvent->scenePos() - mouseEvent->lastScenePos());
qDebug() << mouseEvent->scenePos() - mouseEvent->lastScenePos();
}
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
void mouseReleaseEvent ( QGraphicsSceneMouseEvent * mouseEvent )
{
if (underMouse == 0)
underMouse = itemAt(mouseEvent->scenePos());
else
underMouse = 0;
QGraphicsScene::mouseReleaseEvent(mouseEvent);
}
private:
QGraphicsItem* underMouse;
};
class Piece : public QGraphicsItem
{
public:
Piece() {
setAcceptHoverEvents(true);
}
QRectF boundingRect() const{ return QRectF(0, 0, 50, 50); }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget)
{
painter->drawRect(boundingRect());
}
};
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
scene = new Scene();
Piece* piece = new Piece();
scene->addItem(piece);
graphicsView = new QGraphicsView(this);
graphicsView->setMouseTracking(true);
graphicsView->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
graphicsView->setScene(scene);
graphicsView->show();
graphicsView->setGeometry(QRect(50, 50, 500, 300));
this->setCentralWidget(graphicsView);
}
To copy to clipboard, switch view to plain text mode
Joh
Bookmarks