【问题标题】:QPainter: adding paddingQPainter:添加填充
【发布时间】:2013-09-11 17:27:16
【问题描述】:

有没有一种方法可以轻松地将填充添加到 QPainter 区域?

整个想法是在可绘制区域内有一个边框,我无法在此处绘制,因此当我从 (0, 0) 到 (10, 10) 绘制一条线时,我实际上是在 (0 + 填充,0 + 填充)到(10 + 填充,10 + 填充)。不过应该可以看到填充边框。

假设 QPainter 创建为:

QPainter painter(aWidget); // aWIdget is a Widget*

和一个padding 整数变量。现在让我们将小部件的可绘制区域视为“A”。我怎样才能拥有一个可绘制区域“B”,以便 B 具有:

B_width = A_width - 2 * padding;
B_height = A_height - 2 * padding;

A 中的 QPoint(padding, padding) 会是 B 中的 QPoint(0, 0)?

我开始自己实现它(这会很痛苦),但我想知道在 Qt 中是否有更简单的“预制”方式来实现它?也许是转型?

谢谢。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    是的,进行转换将是最好的方法。如果你应用一个变换,那么所有后续的绘制调用都将被那个变换所变换。例如,应用 (5,5) 的平移会使 (0,0) 到 (10,0) 的行变为 (5,5) 到 (15,5)。

    QPainter 文档可以在here 找到,如果您查看底部附近,您会看到translate 方法。这正是您要寻找的。​​p>

    painter.translate(5, 5); // that should do it
    

    编辑: 要允许绘制调用仅编辑表面的特定部分,请使用 QPainter 的 setClipRect 方法。

    painter.setClipRect(5, 5, originalWidth - 5, originalHeight - 5);
    

    【讨论】:

    • 好的,翻译。好的。但我需要有一种方法来获取新区域的新 heightwidth 值,并限制右侧和底部的区域(该翻译不会这样做)。我基本上需要在 A 中有一个新的 drawable 而不会丢失 A 的一部分。
    • setClipRect 不修改坐标系。 (0, 0) 仍被视为在同一位置,因此未显示。
    【解决方案2】:

    您也可以设置窗口区域。如果您查看 QPainter 的文档,您将看到两个有趣的方法:setWindow(您可以将可打印区域转换为自定义坐标)和 setViewport(您可以使用它来将可打印区域限制为给定的矩形)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 2011-12-15
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多