Как получить события перемещения элемента отчета QGraphicsScene - PullRequest
2 голосов
/ 05 января 2010

Qt QraphicScene Qt предоставляет некоторые полезные функциональные возможности: пользователь может выбирать объекты и перемещать их.

Я хочу еще одну вещь - получать уведомления, когда пользователь закончит перемещение объекта. Существуют события более низкого уровня, такие как перемещение мыши, нажатие, отпускание, но я не хотел бы переопределять уже существующую функциональность (перемещение объектов).

Метод http://doc.trolltech.com/4.2/qgraphicsitem.html#itemChange выглядит так, но он НЕ вызывается, когда пользователь перемещает объект.

Я использую Qt 4.6

Оказывается, вы должны установить флаг, чтобы включить это событие: item-> setFlag (QGraphicsItem :: ItemSendsGeometryChanges, true);

Но теперь событие срабатывает каждый раз, когда изменяются кординаты предмета. Я хочу, чтобы событие происходило только тогда, когда изменение сделано пользователем.

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

За исключением того, что это не может работать всегда, потому что вы не всегда получаете mouseReleaseEvent ...

Однако код, который выполняет перетаскивание, блокирует код, поэтому вы можете поместить его туда, так как код будет продолжаться только после того, как вы отпустите кнопку мыши, и он всегда будет работать ... (QT 4.7 +)

1 голос
/ 05 января 2010

Я думаю, что лучший способ - реализовать событие mouseRelease для ваших предметов, при его запуске вы сможете узнать, был ли предмет перемещен или нет. Если элемент был перемещен, примите событие, иначе отправьте событие в базовый класс.

Например:

 void YourItem::mouseReleaseEvent(QMouseEvent *event)
 {
     if (wasMoved()) {
         //do something and accept the event
     } else {
         // to the base class
         QGraphicsItem::mouseReleaseEvent(event);
     }
 }

WasMoved () - это ваш способ узнать, был ли элемент перемещен

...