在QT中绘制多条线

时间:2015-04-28 13:30:11

标签: c++ qt qpainter

我想用应用程序绘制多行。每行包含三个“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。 但他只画了第一线。 我错了什么?

2 个答案:

答案 0 :(得分:1)

在这些行中,您不仅要引用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())

答案 1 :(得分:1)

问题是您在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);
}

您不需要将points数组声明为static。请注意,我将z增加到12 - 3 = 9以防止溢出。