Seite 1 von 1

Kreis Teile Zeichnen [gelöst]

Verfasst: 30. Juni 2008 12:17
von Qt-nator
Hi,

ich hab Folgendes Problem:

Man stellt sich vor man hat einen Kreis, und bestimmte Teile von diesem Kreis müssen dicker und eine andere Farbe haben als die Restteile vom Kreis.

Es geht hier bei mir jetzt um:

4tel Kreis
5tel Kreis
8tel Kreis

Stücke.

Nun hab ich das mit QRectF versucht was aber nicht von erfolg gekrönt war.

Jetzt meine Frage:

Kann ich was anders außer QRectF dazu verwenden und wenns nur mit QRectF geht könnte mir jemand das erklären?

Gruß

Qt-nator

Verfasst: 30. Juni 2008 12:49
von Christian81
Ich weiß nicht genau was Du möchtest, aber hast Du schonmal QPainter::drawPie() angeschaut?

Verfasst: 30. Juni 2008 12:55
von Qt-nator
ja das ist so ungefähr das was ich brauche. Nur die Striche zur Mitte hin stören.

Also ich hab einen abgeschlossenen Kreis. Eine Durchgezogene Linie und auf diesem Kreis gibt es bestimmte stellen wo die Linie dicker sein muss.

Deswegen wollte ich die Linien einfach neu drüberzeichnen. Dafür brauch ich halt denn die Spezielen Kreis-Teile.

Und wenn ich dann weis wie ich so "Teile" erstellen kann dann ist das setzen ja kein Problem mehr.

Verfasst: 30. Juni 2008 14:01
von Christian81
Wenn die Striche stören schau Dir die Doku nochmal an.

Verfasst: 30. Juni 2008 14:14
von Qt-nator
Meinst du"drawArc" ?

Also ich hab da jetzt mal was versucht und habe einen Kreis erstellt. Aber was ich noch nicht ganz verstehe ist die Positionierung und das setzen Punkte.

Code: Alles auswählen

 QRectF rectangle(dWidthHalf - 80, dHeigthHalf -60, 80.0, 60.0);
 int startAngle =  16;
 int spanAngle = 90 * 16;
 painter.drawArc(rectangle, startAngle, spanAngle); 

 int startAngle1 = 90 * 16;
 painter.drawArc(rectangle, startAngle1, spanAngle); 

 int startAngle2 = 180 * 16;
 painter.drawArc(rectangle, startAngle2, spanAngle); 

 int startAngle3 = 270 * 16;
 painter.drawArc(rectangle, startAngle3, spanAngle);

Verfasst: 30. Juni 2008 14:17
von macman
startAngle bedarf wohl keiner Erläuterung und spanAngle ist einfach der Winkel wie weit gezeichnet werden soll. 90*16=1440 = 4 Vollkreise, das wird es dann wohl nicht sein :-)

Verfasst: 30. Juni 2008 14:19
von Christian81
macman hat geschrieben:90*16=1440 = 4 Vollkreise, das wird es dann wohl nicht sein :-)
doch - Qt rechnet hier in 1/16 Grad.
Was sein Problem jetzt ist weiß ich aber trotzdem nicht.

Verfasst: 30. Juni 2008 14:19
von Qt-nator
The startAngle and spanAngle must be specified in 1/16th of a degree, i.e. a full circle equals 5760 (16 * 360). Positive values for the angles mean counter-clockwise while negative values mean the clockwise direction. Zero degrees is at the 3 o'clock position.

Also ist das doch richtig. Gut.

Mein Problem ist das ich nicht ganz verstehe wie ich diesen Bogen positioniern kann.

Ich kann ja x,y,w und h übergeben. Nur verstehe ich das zusammen spiel nicht so ganz.

Verfasst: 30. Juni 2008 15:17
von macman
Christian81 hat geschrieben:doch - Qt rechnet hier in 1/16 Grad.
Eiwei, man sollte vorher in die Doku gucken :oops:
Christian81 hat geschrieben:Was sein Problem jetzt ist weiß ich aber trotzdem nicht.

Vermutlich wird das Rectangle falsch berechnet. Für Kreise braucht man ein Quadrat und kein Rechteck.

Verfasst: 30. Juni 2008 15:43
von Qt-nator
Ich hab jetzt mal rumprobiert und bin durch Zufall da drauf gekommen:

Code: Alles auswählen

 QRectF rectangle(dWidthHalf - 55, dHeigthHalf - 55, 110.0, 110.0);
 int startAngle = 45*16;
 int spanAngle =  -180* 16;
 painter.drawArc(rectangle, startAngle, spanAngle); 
Macht von einem Teil genau das was ich brauche. Nur hab ich die 55 und die 110 durch Probieren erhalten.

Und verstehen wie das mit dem drawArc funktioniert tu ich immernoch nicht.
Kann mir das nicht mal einer Erklären?

Wie ich start und end-Punkt meiner Linien setzen kann z.b.?

Verfasst: 30. Juni 2008 16:41
von Christian81
Ich glaubedieser Aufruf ist verständlicher.