Hilfe bei Zeichenfunktion/-primitiven
Verfasst: 17. Dezember 2009 18:40
Ich wollte einen Ring zeichnen, und diesen Füllen, dazu benutze ich einen PainterPath:
Nun hatte ich vor in diesen Ring ein paar Stellen zu markieren, indem ich Bereiche dieses Rings farbig nachzeichne.
Dabei entstehen Vierecke mit jeweils zwei bogenförmigen Kanten. Ich habe das ganze mal zur Veranschaulichung hochgeladen:
Wie man sieht habe ich bisher nur mit QLines die beiden Kanten innerhalb des Rings nachgezeichnet.
Allerdings wollte ich das Ganze als abgeschlossene Form zeichnen um die Markierungen mit Farbe zu füllen (Bereiche zwischen QLINES bisher noch farblos). Ich weis aber nicht ganz wie ich das anstellen kann.
Mit PainterPathes springt die Linie immer wieder zu einem bestimmten Startpunkt zurück, an dem ich wiederrum schlecht einen Bogen zeichnen kann.
Das ist der bisherige Code... Vielleicht kann mir jemand weiter helfen.
Code: Alles auswählen
QPainterPath plasmidPath;
plasmidPath.addEllipse(rOuterCircle);
plasmidPath.addEllipse(rInnerCircle);
pPainter->setPen(borderPen);
pPainter->drawPath(plasmidPath);
Nun hatte ich vor in diesen Ring ein paar Stellen zu markieren, indem ich Bereiche dieses Rings farbig nachzeichne.
Dabei entstehen Vierecke mit jeweils zwei bogenförmigen Kanten. Ich habe das ganze mal zur Veranschaulichung hochgeladen:
Wie man sieht habe ich bisher nur mit QLines die beiden Kanten innerhalb des Rings nachgezeichnet.
Allerdings wollte ich das Ganze als abgeschlossene Form zeichnen um die Markierungen mit Farbe zu füllen (Bereiche zwischen QLINES bisher noch farblos). Ich weis aber nicht ganz wie ich das anstellen kann.
Mit PainterPathes springt die Linie immer wieder zu einem bestimmten Startpunkt zurück, an dem ich wiederrum schlecht einen Bogen zeichnen kann.
Das ist der bisherige Code... Vielleicht kann mir jemand weiter helfen.
Code: Alles auswählen
QPoint pCircleCenter = QPoint(rRect.x()+fDiam/2, rRect.y()+fDiam/2);
float fRadiusOut = fDiam / 2; // bis zum äußeren kreis
float fRadiusIn = fRadiusOut - fWidth_Circle; // bis zum äußeren kreis
for(int i = 0; i < m_lSites.size(); i++) {
QColor cLineColor = m_lSites.at(i).m_cColor;
cLineColor.setAlpha(128);
QPen pLine(cLineColor, 1);
pPainter->setPen(pLine);
float f360Deg = 360.0f;
float fXRel = (float)m_lSites.at(i).m_iStart / (float)m_iNucSeqSize * f360Deg;
float fWidthRel = ((float)m_lSites.at(i).m_iEnd - (float)m_lSites.at(i).m_iStart) / (float)m_iNucSeqSize * f360Deg;
QPointF pLIn(cos(fXRel * PI/180.0f) * fRadiusIn, sin(fXRel * PI/180.0f) * fRadiusIn);
QPointF pLOut(cos(fXRel * PI/180.0f) * fRadiusOut, sin(fXRel * PI/180.0f) * fRadiusOut);
float fXR = fXRel + fWidthRel;
QPointF pRIn(cos(fXR * PI/180.0f) * fRadiusIn, sin(fXR * PI/180.0f) * fRadiusIn);
QPointF pROut(cos(fXR * PI/180.0f) * fRadiusOut, sin(fXR * PI/180.0f) * fRadiusOut);
QLineF lLeft(pLIn+pCircleCenter, pLOut+pCircleCenter);
QLineF lRight(pRIn+pCircleCenter, pROut+pCircleCenter);
pPainter->drawLine(lLeft);
pPainter->drawLine(lRight);
}