9

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

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

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

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

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

-编辑:

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

GraphicsScene 中的轴承公式计算产生不稳定的结果

这就是我想要做的。 期望的结果

正如您所看到的,线条在绘制时会通过外部变量改变颜色。恐怕 Qgradient 可能不起作用,因为这条线并不总是笔直的;颜色需要沿着线条流动。

这是正在发生的事情:

在此处输入图像描述

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

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

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

我希望这一切都有意义。

4

1 回答 1

6

您可以使用多个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);

}

使成为

如果您觉得对“moveTo”和“lineTo”的调用有点繁重,您可以将所有 QPainterPaths 封装在您自己的类中,使用一个lineTo(QPointF, QColor)函数来处理更改颜色时的路径切换。

于 2017-11-07T11:43:01.343 回答