2015-04-28 360 views
1

我想用應用程序繪製多條線。每行由三個「x」值和三個「y」值組成,所以我使用QPointF 3點。在QT中繪製多條線

現在我想從我的數組中繪製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爲第一行。第二行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 遞增循環,但他只畫了第一道防線。 我錯了什麼?

回答

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); 
} 

您不需要將點數組聲明爲靜態。請注意,我將z增加到12 - 3 = 9以防止溢出。

+0

很好用。多謝 – user3676560

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()) 
+0

好吧,現在他畫第一條線是正確的,但他不畫第二至第四條線。 – user3676560