У QGraphicsItem есть несколько родственных функций, которые возвращают "форму" объекта, но которые не экувивалентну друг другу.
QGraphicsItem::boundingRect
- область "занимаемая" элементом, с точки зрения рисования на экране. Должна включать в себя элементы все точки, которые будут затронуты во время перерисовки. Если вы вернете область больше чем реально необходимо - функция pain будет вызваться чаще чем нужно. Если меньше чем необходимо - то когда пользователь будет перемещать другие элементы сцены, задевая края элемента с ошибкой, то будет "затирать" края. При перемещении собственно элемента - могут остаться "следы": сцена перерисует только область где перемещенный элемент был (определяя ее по старому положению элемента, и boundingRect) и вызовет для нового положения paint. Если paint рисовал что-то за пределами boundingRect, то эти элементы могут оказаться не стерты.
Как правило, программист знает что он собирается рисовать в paint и какого оно будет размера.
Если размер элемента меняется с какими-то параметрами, то перед изменением этих параметров важно вызвать prepareGeometryChange он запомнит какую область нужно перерисовать, по "старому" значению boundingRect.
QGraphicsItem::boundingRegion
- нужно переопределить если ваш элемент "скорее одномерный, чем двумерный". Например, соединительная линия, пересекающая экран по диагонали имеет boundingRect, равный всему экрану, т.е. ее нужно было бы перерисовать буквально на любой чих.
QGraphicsItem::shape
- форма объекта с точки зрения взаимодействия с пользователем. Т.е. область клики в которую будут считаться кликами по элементу. Если пользователь на переопределил функцию, то возвращается boundingRect.
QGraphicsItem::opaqueArea
- непрозрачная часть объекта, с точки зрения перерисовки. Этот метод позволяет не перерисовать часть элементов, если они лежат "под" непрозрачной частью другого элемента. По умолчанию - элемент (полу)прозрачен, т.е. возвращается пустой QPainterPath.