Как ограничить область перетаскивания QGraphicsItem внутри QGraphicsScene
я создаю небольшое приложение на Qt/C++ для работы с графическими элементами: оно представляет собой прямоугольную область, где можно перетаскивать объекты с помощью мыши, и вращать вокруг своей оси при помощи отдельного интерфейса.
Для того, чтобы объекты можно было перетаскивать мышью, при добавлении их на сцену, я устанавливаю флаг: setFlag(QGraphicsItem::ItemIsMovable)
и это работает очень качественно.
В качестве контейнера для множества перемещаемых объектов выступает QGraphicsScene.
Но есть одна единственная проблема, которую я не могу решить - объект внутри сцены можно перетаскивать бесконечно далеко за пределы видимой области. setSceneRect()
не помогает. Также я пробовал переопределять методы mousePressEvent()
и mouseMoveEvent()
и внутри них ограничивать перемещение, но тут проблема в том, что я теряю преимущества использования флага setFlag(QGraphicsItem::ItemIsMovable)
. Например при использовании флага, когда поворот объекта (вокруг своей оси) ненулевой его захват и перемещение работают все также корректно, а при переопределении мне так и не удалось нормально реализовать эти две функции. Также ограничение его перемещения по сцене при повороте объекта, работает очень криво.
Мне кажется очень странным то, что в Qt есть возможность использовать уже готовый функционал для перетаскивания объектов на сцене, но чтобы ограничить эту самую сцену, нужно переписывать весь этот функционал заново, хотя требование об ограничении сцены очень очевидное и нужное...
Поэтому возник вопрос - можно ли как-то ограничить область перетаскивания графических объектов внутри QGraphicsScene, и при этом сохранить использование флага QGraphicsItem::ItemIsMovable
.