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