Prevent QGraphicsItem from moving outside of QGraphicsScene

qgraphicsitem, qgraphicsscene, qt

Solution

You can override `QGraphicsItem::mouseMoveEvent()` like this:

YourItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QGraphicsItem::mouseMoveEvent(event); // move the item...

    // ...then check the bounds
    if (x() < 0)
        setPos(0, y());
    else if (x() > 481)
        setPos(481, y());

    if (y() < 0)
        setPos(x(), 0);
    else if (y() > 270)
        setPos(x(), 270);
}

Problem

I have a scene which has fixed dimensions from (0;0) to (481;270): ``` scene->setSceneRect(0, 0, 481, 270); ``` Inside of it, I have a custom `GraphicsItem` and I can move it thanks to the flag `ItemisMovable`, but I would like it to stay within the Scene; I actually mean I don't want it to have coordinates neither under (0;0) nor over (481;270). I tried several solutions like overriding `QGraphicsItem::itemChange()` or even `QGraphicsItem::mouseMoveEvent()` but I still cannot manage to reach what I want to do. What is the suitable solution for my needs? Do I use `QGraphicsItem::itemChange()` badly? Thanks in advance.

Original source