2

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

4

4 回答 4

4

图形和绘图形状的坐标系可能很难直截了当。您经常会发现自己编写测试图以使其正确,但它正在精确地绘制您告诉它绘制的内容。您需要了解坐标系。在此页面上,请特别注意“一像素宽笔”的图片QRectF

于 2011-07-08T22:22:29.083 回答
4

请注意,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()));
于 2011-07-08T22:53:43.470 回答
2

QGraphicsEffect可能是你的朋友。您可以将其子类化以在任意 QGraphicsItem 周围绘制边框。只需记住重新实现boundingRectFor()以包含额外的边框。

于 2011-07-08T22:19:24.417 回答
0

我发现了我的问题。感谢所有建议,但现在我明白了,我的问题出在其他地方。

我可以绘制一个QRectF()适合我项目的 boundingRect 的 ,但是......当我缩放我的QGraphicsView(无论我使用fitInView()方法还是我自己的实现)时,显示我的边框时会出现一些错误。

很少有一两行矩形比其他行更紧。我认为它可能与我QGraphicsItem的s有关,它们同时也是QGraphicsSvgItems。

于 2011-07-09T22:56:22.797 回答