2016-03-21 8 views
2

Aşağıdaki resimde gri pasta gösterir, bu kullanarak QT çekmek istiyorum 5.5Qt 5.5 beraberlik dolu pasta

X artar Y Bir başlangıç ​​açısına sahip ve alt

için üst artırır soldan sağa yay üst ve alt temsil eder bir uç açısı, I kullanılarak yay açısı hesaplanırken am:

double dblArcAngle = fmod(mcfltElevMaxLimit - mcfltElevMinLimit + 180.0, 360.0) - 180.0; 

Burada:

mcfltElevMaxLimit is 60 and mcfltElevMinLimit is -10 

drawPie çağrısı şuna benzer:

objOffscrPainter.drawPie(QRect(rctGeom.left() + mcintElevLeftMargin 
           ,rctGeom.top() + mcintElevBottomMargin 
           ,rctGeom.width() - mcintElevLeftMargin 
           ,rctGeom.height() - mcintElevBottomMargin) 
           ,mcfltElevMaxLimit * 16, dblArcAngle * 16); 

Ne olsun pasta olmalıdır yarıda yaklaşık çok küçük bir çoklu çizgi olduğunu.

(düzenleme), sadece startAngle ve spanAngle parametrelerinin 2 ve 3 parametrelerinin 16 ile çarpılması gerektiğini belgeleyen belgeleri okuyun, bu da doğru yönde değil, merkeze değil ilerlemesine göre bir pasta üretir.

(edit 2), daha fazla ilerleme, şimdi aşağıdaki resim, elde ettiğim sonuçları gösteriyor, dikdörtgeni geçiriyorum, dış dikdörtgen ve ekseni içeriyor, ancak bir sebepten dolayı turta ofset mi ???

enter image description here

Ne istiyorum gerçekleştirmek beyaz ekseni ve görüntü doldurma ile sola hizalanmış altına saklanmış pasta.

Geçiş dikdörtgen, pasta için orta noktayı belirlemek için kullanılır. Eğer bu doğruysa, o zaman dikdörtgenin ortası orijin (sol alt) olacak şekilde ayarlanmalı ve boyut da ekranı doldurmak için ayarlanmalıdır.

cevap

1

QPainter::drawPie'un ilk parametresindeki dikdörtgen, arkınızı içeren bir dairenin sınırlayıcı bir kutusudur. Yani, böyle bir şey denemek gerekenleri çizmek için:

objOffscrPainter.drawPie(QRect(center.x() - r, center.y() - r, 2 * r, 2 * r) 
    ,16*mcfltElevMaxLimit, 16*dblArcAngle); 

bu kodu kullanabilirsiniz böylece

sizin durumda center bir QPoint(0, 0) olduğu görülmektedir (center sizin yayın bir merkez olduğu) :

objOffscrPainter.drawPie(-r, -r, 2*r, 2*r, 16*mcfltElevMaxLimit, 16*dblArcAngle); 

(biz de QRect olmadan diyoruz documentation görebilir)