Как нарисовать границу QGraphicsItem
? Простой painter->drawRect( boundingRect() )
в перегруженном методе рисования неверен (правый нижний угол находится за пределами элемента).
Нарисовать границу QGraphicsItem
Ответы (4)
Система координат для графики и рисунков может быть сложной для понимания. Вы часто обнаружите, что программируете тестовые рисунки, чтобы сделать это правильно, но это рисует именно то, что вы говорите ему рисовать. Вам необходимо понимать систему координат. На этой странице обратите особое внимание на изображение "Перо шириной в один пиксель" для QRectF
.
Обратите внимание, что в документации для QPainter::drawRect() указана фактическая ширина :
Заполненный прямоугольник имеет размер прямоугольника.size(). Обведенный прямоугольник имеет размер прямоугольника.size() плюс ширина пера.
Учитывая это, я полагаю, вам нужно что-то более сложное, чем просто использование ограничивающего прямоугольника:
QRect r = boundingRect();
QPen p = painter->pen();
painter->drawRect(QRect(r.x(), r.y(), r.width()-p.width(), r.height()-p.width()));
QGraphicsEffect может быть здесь вашим другом. Вы можете подклассировать его, чтобы нарисовать границу вокруг произвольного QGraphicsItem. Просто не забудьте переопределить boundingRectFor()
, чтобы включить дополнительную границу.
Я узнал свою проблему. Спасибо за все советы, но теперь я вижу, что моя проблема была в другом.
Я могу нарисовать QRectF()
, который подходит к boundingRect моего элемента, но... когда я масштабирую свой QGraphicsView
(независимо от того, использую ли я метод fitInView()
или свою собственную реализацию), возникают некоторые ошибки в отображении моей границы.
Редко одна или две линии прямоугольника бывают более плотными, чем другие. Я думаю, что это может быть связано с моими QGraphicsItem
, которые одновременно и QGraphicsSvgItem
.