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
以防止溢出。
我想用一个应用程序画多条线。每行包含三个 "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
以防止溢出。