Понимание взаимодействия между методами QGraphicsItem boundingRect и shape

У меня большой опыт работы с QGraphicsScene в Qt, но я надеюсь, что кто-нибудь сможет прояснить детали относительно методов boundingRect и shape для QGraphicsItem. Насколько я могу найти, документация не затрагивает эту конкретную проблему.

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

Теперь ситуация такова, что ограничивающий прямоугольник вычисляется из границ пути плюс любая ширина пера, что правильно для охвата закрашенной области. Однако при вычислении результата shape он больше ограничивающего прямоугольника, поскольку буферная зона выбора больше области рисования.

Это проблема? Допустимо ли, что boundingRect НЕ закрывает область результатов shape? Или мне нужно пересчитать boundingRect при пересчете shape?

Спасибо.

Дуг МакГрат


person goug    schedule 10.12.2015    source источник


Ответы (1)


QGraphicsItem::shape используется для обнаружения столкновений объектов, проверки попадания и определения где происходят щелчки мыши.

Напротив, QGraphicsItem::boundingRect используется при рисовании объекта, зная когда объект находится за пределами экрана или скрыт. Как указано в документации дляboundingRect: -

QGraphicsView использует это, чтобы определить, требует ли элемент перерисовки.

Следовательно, boundingRect должен полностью охватывать QPainterPathreturned из функции формы.

person TheDarkKnight    schedule 10.12.2015