Qt如何在矩形周围绘制边框?

8

我想知道在使用QPainter的drawRect时,Qt是如何实现边框的。原因是我正在尝试将三个矩形放在一起,并且希望能够在所有画笔大小下完美贴合,但我遇到了困难。

2个回答

21

QPainterdrawRect函数文档中写道:

描边矩形的大小为输入矩形加上画笔宽度。

因此,效果如下图所示:

enter image description here


我已经阅读了这个,它告诉我宽度是多少,但X和Y呢?如果我使用笔宽为5的命令:paint.drawRect(5,5,10,10); 它将绘制一个15像素宽的矩形。但是它不会从(5,5)开始绘制。 - Serodis
问题是,QT似乎没有在矩形外绘制边框。笔宽实际上在矩形内部。也就是说,在我之前的评论中,它不仅不从5,5开始,而且它的宽度也不是10。它实际上绘制了一个宽度为5和两个边框为5的边框。这总共是15,正如文档所述。我的问题是,我想找到一种确定任何x、y、width、height、penwidth的新x和y的方法。 - Serodis
从所有这些中,我已经得出了以下结论: 矩形宽度=初始宽度-边框宽度 新宽度=边框宽度+初始宽度 新X=旧X-(边框宽度/2) 新Y=旧Y-(边框宽度/2) 如果边框宽度是奇数,则似乎会截断0.5。然而,目前我正在寻找一种证明这一点的方法。 - Serodis
嗯,我仍在尝试确保接受答案之前正确的部分是新的X和新的Y。正如您的绘图所示,它是inputX - (penWidth/2)。但是,当penWidth为5时,这意味着什么?一些测试表明它截断了小数,但是我想要确定。 - Serodis
从我所有的测试中,我还没有发现任何与我接受的截断不同的东西。 - Serodis

0

我只是想补充一下答案,并回答有关截断的问题。

可能会发生截断,因为您正在使用QRect而不是QRectF。 QRectF提供了浮点精度。 同样,您可以使用QPen :: setWidthF(qreal width)来确保边框也没有被截断。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接