【问题标题】:How does Qt draw a border around a rectangle?Qt如何在矩形周围绘制边框?
【发布时间】:2012-02-12 15:10:43
【问题描述】:

我想知道Qt在使用QPainter的drawRect时是如何做边框的。这样做的原因是我试图绘制三个相邻的矩形,但我无法让它们在所有笔尺寸下都能完美触摸。

【问题讨论】:

    标签: qt qpainter


    【解决方案1】:

    QPainter's documentation for drawRect 说:

    描边矩形的大小为[输入矩形]加上笔宽。

    原来是这样的:

    【讨论】:

    • 我读过这个,它告诉我宽度,但是 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 为奇数,则截断0.5。不过,目前我正在寻找一种方法来证明这一点。
    • 好吧,在接受答案之前,我仍在尝试确保正确的唯一部分是新的 X 和新的 Y。正如您的绘图所示,它是 inputX - (penWidth/2)。但是,当 penWidth 为 5 时,这意味着什么?一些测试表明它会截断小数点,但是,我想确定一下。
    • 从我所有的测试中我还没有找到任何与截断不同的东西,我会接受。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2011-01-19
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多