绘制QGraphicsItem的边框

时间:2011-07-08 21:38:29

标签: c++ qt qgraphicsitem

如何绘制QGraphicsItem的边框?重载绘制方法中的简单painter->drawRect( boundingRect() )不正确(右下角在项目之外)。

4 个答案:

答案 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