Название: Пара вопросов по QGraphicsItem Отправлено: White Owl от Май 15, 2010, 00:37 1) Есть наследник от QGraphicsPixmapItem который можно таскать по сцене, то есть в конструкторе задано: setFlag(QGraphicsItem::ItemIsMovable, true);
Перегружен метод itemChange(): Код: QVariant MyItem::itemChange(GraphicsItemChange change, const QVariant &value) { change = ItemSelectedChange change = ItemSelectedHasChanged change = ItemSelectedChange change = ItemSelectedHasChanged change = ItemSelectedChange change = ItemSelectedHasChanged Не понимаю, почему ItemPositionChange никогда не случается? Объект по окну таскается превосходно... 2) Когда я таскаю по сцене ранее созданный объект, он "заезжает" под объекты созданные позже. Хочу вытаскивать активный объект на самый верх. Можно конечно самостоятельно играться с zValue()/setZValue(), но может есть более простой способ для этого? Qt 4.6.2 Название: Re: Пара вопросов по QGraphicsItem Отправлено: jack_r от Май 15, 2010, 17:25 Цитировать QGraphicsItem::ItemSendsGeometryChanges - The item enables itemChange() notifications for ItemPositionChange, ItemPositionHasChanged, ItemMatrixChange, ItemTransformChange, and ItemTransformHasChanged. For performance reasons, these notifications are disabled by default. You must enable this flag to receive notifications for position and transform changes. This flag was introduced in Qt 4.6. Цитировать 2) Когда я таскаю по сцене ранее созданный объект, он "заезжает" под объекты созданные позже. Хочу вытаскивать активный объект на самый верх. Можно конечно самостоятельно играться с zValue()/setZValue(), но может есть более простой способ для этого? Если есть, мне тоже интересно его узнать. Я же делал выбор активного объекта через QStateMachine, что далеко нетривиально.Название: Re: Пара вопросов по QGraphicsItem Отправлено: White Owl от Май 17, 2010, 20:27 За QGraphicsItem::ItemSendsGeometryChanges - спасибо.
Оказывается мой QtCreator каким-то странным образом подсовывает мне документацию от 4.5. Буду разбираться. Про игру с ZOrder. У меня, проблема еще осложнается тем что у меня есть несколько типов объектов которые должны отрисовываться на разных слоях... В итое добавил в обработчик itemChange() такой код: Код: if(change == QGraphicsItem::ItemSelectedChange) { В минусах: пришлось еще дописать в процедуру добавления объектов на сцену установку уникального ZOrder для новых объектов. И выделить для каждого из типов по собственной "z-области" что, в принципе, ставит ограничение на количество объектов "в слое". Но это не такая уж большая беда если учесть что "слоев" у меня всего три а ZOrder считается как real :) |