Название: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: marleeeeeey от Сентябрь 16, 2014, 10:45 greenCursor->QGraphicsItem::collidingItems().size() возвращает верное количество = 2,
если НЕ использовать redFrame->setFlag(QGraphicsItem::ItemClipsChildrenToShape) greenCursor->QGraphicsItem::collidingItems().size() возвращает НЕ верное количество = 1, если использовать redFrame->setFlag(QGraphicsItem::ItemClipsChildrenToShape) необходимо, чтобы greenCursor->QGraphicsItem::collidingItems().size() возвращал верное количество = 2 при использовании флага redFrame->setFlag(QGraphicsItem::ItemClipsChildrenToShape) (http://rghost.ru/58042548/image.png) (http://rghost.ru/58042555/image.png) Код: #include <QApplication> Название: Re: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: Bepec от Сентябрь 16, 2014, 11:10 Непонятен вопрос. Вы имеете то, что имеете.
И по логике вещей, пусть и притянуто за уши, но верно. Обрезая рисование потомков, по сути, родитель лишает их статуса "объекта". Потому коллизия происходит только с 1 объектом - родителем. В чем проблема? Название: Re: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: marleeeeeey от Сентябрь 16, 2014, 12:28 Непонятно, почему флаг, который отвечает за отрисовку (т.е. QGraphicsItem::ItemClipsChildrenToShape), влияет на физическое положение объектов на сцене.
Требуется сделать так, чтобы объекты не отрисовывались за границами своего предка, но физически считались присутствующими на сцене. В документации не описано такое поведение. Может есть идеи как сделать это по-другому? Название: Re: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: Bepec от Сентябрь 16, 2014, 12:37 Ну смотрите - за объектами скрывается просто занимаемая ими область. Когда вы ставите флаг, у потомков область пространства тупо исчезает - её занимает родительская.
Название: Re: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: marleeeeeey от Сентябрь 16, 2014, 13:01 boundingRect() и rect() потомков остаются без изменения. Следовательно, занимаемая им область также не должна изменяться. Исходя из документации флаг распространяется только на рисование объекта, но ни коим образом не влияет на его геометрию. Либо я что то не так понимаю.
цитата из документации GraphicsItem::ItemClipsChildrenToShape Элемент обрезает рисование всех своих потомков внутри своего контура. Элементы которые явно или неявно являются потомками данного элемента не могут быть отрисованы вне его контура. По умолчанию этот флаг отключён; потомки могут отрисовываться везде. Это поведение навязывается QGraphicsView::drawItems() или QGraphicsScene::drawItems(). Этот флаг был введён в Qt 4.3. Название: Re: QGraphicsItem::collidingItems().size() - не верно считает количество Отправлено: Bepec от Сентябрь 16, 2014, 13:23 Ну смотрим - если будут учитываться bound**, то мы получим в результате дохрена невидимых объектов. Ведь они не будут отрисовываться, но будут иметь bound**. Следовательно обрезается отрисовка и (по идее должно избирательно) отключается bound**.
ну а так надо исходники смотреть, но меня это сейчас не прельщает ) |