QT画多条线

Draw multiple Lines in QT

我想用一个应用程序画多条线。每行包含三个 "x" 值和三个 "y" 值,因此我使用 QPointF 和 3 个点。

现在我想用数组中的值绘制 4 条线。我有两个数组。一个用于 "x" 个值,一个用于 "y" 个值。

数组看起来像这样:

("676.0", "930.0", "930.0", "930.0", "930.0", "1002.0", "1002.0", "1002.0", "1170.0", "1170.0", "1410.0", "1410.0")

值 1-3 用于第一行。第 2 行 4-6...

我为所有 4 行创建了一个简单的循环。

for(int z = 0; z < 12; z+=3)
{
    static const QPointF points[3] = {
         QPointF(lineXarray[z].toDouble(), lineYarray[z].toDouble()),
         QPointF(lineXarray[z+=1].toDouble(), lineYarray[z+=1].toDouble()),
         QPointF(lineXarray[z+=2].toDouble(), lineYarray[z+=2].toDouble())};
    painter.drawPolyline(points, 3);
}

我的想法是,第二个 QPoint 获得第二个值,依此类推,并将循环递增 3。 但他只画了第一条线。 我做错了什么?

在这些行中,您不仅引用了 z+1 和 z+2 处的元素,而且还在递增 z:

  QPointF(lineXarray[z+=1].toDouble(), lineYarray[z+=1].toDouble()),
  QPointF(lineXarray[z+=2].toDouble(), lineYarray[z+=2].toDouble())

当您在循环本身中递增 3 时,您可以只引用 z+1 或 z+2,新代码将是这样的:

  QPointF(lineXarray[z+1].toDouble(), lineYarray[z+1].toDouble()),
  QPointF(lineXarray[z+2].toDouble(), lineYarray[z+2].toDouble())

问题是您也在 [] 运算符中增加了 z 计数器,因此它很快达到了上限。因此你的循环只执行一次。我将按以下方式编写循环:

for(int z = 0; z <= 12 - 3; z += 3)
{
    QPointF points[3] = {
         QPointF(lineXarray[z].toDouble(), lineYarray[z].toDouble()),
         QPointF(lineXarray[z + 1].toDouble(), lineYarray[z + 1].toDouble()),
         QPointF(lineXarray[z + 2].toDouble(), lineYarray[z + 2].toDouble())};
    painter.drawPolyline(points, 3);
}

您无需将点数组声明为静态。请注意,我将 z 增加到 12 - 3 = 9 以防止溢出。