Qt如何围绕矩形绘制边框?

Qt如何围绕矩形绘制边框?,qt,qpainter,Qt,Qpainter,我想知道Qt在使用QPainter的drawRect时如何创建边框。原因是我试图画三个相邻的矩形,但我很难让它们在所有笔大小下都能完美接触。QPainter的drawRect表示: 笔划矩形的大小为[输入矩形]加上笔宽 所以它是这样的: 我只是想补充一下答案,并解决有关截断的问题 截断可能是因为您使用的是QRect而不是QRectF。QRectF为您提供浮点精度。类似地,您可以使用QPen::setWidthF(qreal width)来确保您的边框也不会被截断。我读过这篇文章,它告诉了我宽度,

我想知道Qt在使用QPainter的drawRect时如何创建边框。原因是我试图画三个相邻的矩形,但我很难让它们在所有笔大小下都能完美接触。

QPainter
的drawRect表示:

笔划矩形的大小为[输入矩形]加上笔宽

所以它是这样的:


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


截断可能是因为您使用的是QRect而不是QRectF。QRectF为您提供浮点精度。类似地,您可以使用QPen::setWidthF(qreal width)来确保您的边框也不会被截断。

我读过这篇文章,它告诉了我宽度,但是X和Y呢?如果我这样做:paint.drawRect(5,5,10,10);当笔宽为5时,它将绘制一个15像素宽的矩形。但是,它不会从(5,5)开始绘制边界。问题是,QT似乎不会在矩形外绘制边界。钢笔的宽度实际上在矩形内。也就是说,在我之前的评论中,它不仅不是从5,5开始,而且宽度也不是10。它实际上绘制了5的宽度和两个5的边界。如文件所述,总共15个。我的问题是我想找到一种方法来确定任何x,y,width,height,penwidth的新x和y是什么。从所有这些我都能想到:rectWidth=initialWidth-borderWidth-newWidth=borderWidth+initialWidth-newX=oldX-(borderWidth/2)newY=oldY-(borderWidth/2)如果borderWidth是奇数,.5被截断。然而,目前我正在寻找一种方法来证明这一点。在接受答案之前,我唯一仍在努力确保正确的部分是新的X和新的Y。正如您的图纸所示,它是inputX-(penWidth/2)。但是,当penWidth为5时,这意味着什么?一些测试表明它会截断小数,但是我想确定一下。从我所有的测试中,我还没有找到任何与截断不同的东西,我会接受的。