如何绘制QGraphicsItem
的边框?重载绘制方法中的简单painter->drawRect( boundingRect() )
不正确(右下角在项目之外)。
答案 0 :(得分:4)
图形和绘图形状的坐标系统可能很难直接。您经常会发现自己正在编写测试图纸以使其正确,但它正在精确地绘制您要绘制的图形。您需要了解coordinate system。在此页面上,请特别注意QRectF
的“一个像素宽的笔”的图片。
答案 1 :(得分:3)
请注意,QPainter::drawRect()的文档提到了实际宽度:
填充矩形的大小为rectangle.size()。描边矩形的大小为rectangle.size()加上笔宽。
考虑到这一点,我想你会想要比使用边界矩形更复杂的东西:
QRect r = boundingRect();
QPen p = painter->pen();
painter->drawRect(QRect(r.x(), r.y(), r.width()-p.width(), r.height()-p.width()));
答案 2 :(得分:2)
QGraphicsEffect可能是你的朋友。您可以将其子类化以在任意QGraphicsItem周围绘制边框。请记住重新实现boundingRectFor()
以包含额外的边框。
答案 3 :(得分:0)
我发现了我的问题。感谢所有建议,但现在我知道,我的问题出在其他地方。
我可以绘制一个QRectF()
,它适合我项目的boundingRect,但是......当我缩放QGraphicsView
时(无论我使用fitInView()
方法,还是我自己的方法)实现)显示我的边框有一些错误。
很少有一两行矩形比其他一行更严格。我认为它可能与我的QGraphicsItem
相关,同时也是QGraphicsSvgItem
。