如何以不同方式为QPainterPath子路径着色?

时间:2017-11-01 18:46:13

标签: c++ qt qpainterpath

正如标题所示,我正在寻找一种方法来为QPainterPath的子路径着色应用于QGraphicsPathItem的不同颜色,或者只是使用QGradient QPen沿PathItem更改颜色。

最终我试图找到正确的解决方案,这将使我能够明显地绘制一条线,根据外部变量改变颜色。

我正在使用QGraphicsScene绘制所有内容。

我目前的解决方案让我创建了多个QGraphicsPathItems,每个QGraphicsPathItems的颜色与各自的QPens不同。当我获取数据时,我填充与那些PathItems相关联的PainterPath。这给了我需要的多彩线条,但线条明显断开。

我或者需要能够在颜色更改期间使QPainterPath的子路径不可见,或者更改应用于单个PathItem的渐变。或者也许还有另一种我想念的方法。 任何帮助都会很棒。

- 编辑:

正如我的问题解决方案中所述,这就是我目前正在进行绘图的方式。再次注意,我正在使用GraphicsScene。

Bearing Formula calculations in GraphicsScene producing erratic results

这是我尝试做的事情。 Desired Result

正如您所看到的那样,线条在外部变量绘制时会改变颜色。我担心Qgradient可能无法正常工作,因为这条线并不总是笔直的;颜色需要沿着线流动。

以下是发生的事情:

enter image description here

如您所见,红线(PathItem)从最后可见的位置跳到新位置。

为了更好地澄清行为,想象一下这条线是随着时间的推移而绘制的。它从红色开始,很快变量被设置并且绘制的线段的颜色变为橙色。该行的红色部分保持不变,因此我们可以从历史上看到当时该变量的状态。在不同的时间,变量会进行调整,并且应用于线条新部分的颜色会相应更新。

当线条完成绘制后,我们可以查看它并查看颜色何时发生变化。

我希望这一切都有道理。

1 个答案:

答案 0 :(得分:5)

您可以使用多个QPainterPath,每种颜色一个。然后用适当的颜色涂上它们。请务必使用moveTo()替换当前路径光标而不绘制线条。

void Widget::paintEvent(QPaintEvent *event)
{
    QPainterPath redPath;
    QPainterPath bluePath;
    redPath.moveTo(0,0);
    redPath.lineTo(60,60);
    bluePath.moveTo(60,60);
    bluePath.lineTo(70,20);
    redPath.moveTo(70,20);
    redPath.lineTo(100,100);
    bluePath.moveTo(100,100);
    bluePath.lineTo(160,260);


    QPainter painter(this);
    painter.setRenderHint(QPainter::HighQualityAntialiasing, true);
    painter.setPen(QPen(Qt::red, 4));
    painter.drawPath(redPath);
    painter.setPen(QPen(Qt::blue, 4));
    painter.drawPath(bluePath);

}

render

如果你觉得打电话给" moveTo"和" lineTo"有点沉重,您可以使用lineTo(QPointF, QColor)函数将所有QPainterPath封装在您自己的类中,该函数将在您更改颜色时处理路径切换。