Из документации qt отметьте QGraphicsItem::ItemPositionChange
:
Позиция предмета меняется. Это уведомление отправляется, если
ItemSendsGeometryChanges
флаг включен, и когда элемент локальный
изменение положения относительно своего родителя (т.е. в результате вызова
setPos()
или moveBy()
). Значением аргумента является новая позиция (т.е.
QPointF
). Вы можете позвонить pos()
, чтобы получить исходную позицию. Не звоните
setPos()
или moveBy()
в itemChange()
, поскольку это уведомление
поставлено; вместо этого вы можете вернуть новую, настроенную позицию из
itemChange()
. После этого уведомления QGraphicsItem
немедленно отправляет
ItemPositionHasChanged
уведомление, если позиция изменилась.
Таким образом, вы должны включить флаг QGraphicsItem::ItemSendsGeometryChanges
, чтобы вызывать itemChange
при изменении позиции.
По умолчанию это отключено для оптимизации :
Из соображений производительности эти уведомления по умолчанию отключены.
Вы должны включить этот флаг, чтобы получать уведомления о позиции и
изменения трансформации. Этот флаг был введен в Qt 4.6.
Чтобы установить флаг, вы должны вызвать функцию setFlag
предпочтительно в конструкторе вашего пользовательского элемента.
item->setFlag(GraphicsItem::ItemSendsGeometryChanges);