Перемещение дочерних элементов в QGraphisItem

У меня есть элемент, который является родителем некоторых других элементов. Это не группа, на самом деле этот элемент рисует кубическую кривую Безье, а дочерние элементы являются ее контрольными точками.

Проблема в том, что перемещение дочерних элементов приведет к изменению геометрии, поэтому я должен вызывать родительский prepareGeometryChange() при перемещении дочерних элементов, но этот метод защищен.

Это всего лишь пример, и в целом вопрос, на который я ищу ответ, таков:

когда QGraphicsItem имеет геометрию, которая зависит от его дочерних элементов, а дочерние элементы могут перемещаться при взаимодействии с пользователем, как мне использовать prepareGeometryChange()?

Нужно ли его вызывать? Неправильно ли создавать предметы таким образом и использовать для этой цели дочерние элементы?


person AkiRoss    schedule 05.03.2013    source источник


Ответы (1)


Я помню ту же проблему для себя, я повторно реализовал

QGraphicsItem::itemChange(GraphicsItemChange change, const QVariant & value)

как для детей, так и для родителей.

Когда каждый change был QGraphicsItem::ItemPositionChange, этот дочерний элемент излучает сигнал, а родитель имеет соответствующий слот.

person masoud    schedule 05.03.2013
comment
И я предполагаю, что родитель вызовет prepareGeometryChange в этом слоте, верно? - person AkiRoss; 05.03.2013
comment
При реализации itemChange у вас есть доступ к prepareGeometryChange, если это необходимо. - person masoud; 05.03.2013
comment
Хорошо, я понял, испускаемый сигнал — это сигнал изменения элемента, который доставляется родителю, а затем родитель готовится к изменению. Во всяком случае хорошо, я думал, что это должно быть что-то вроде этого. Спасибо - person AkiRoss; 05.03.2013