2014-09-08 6 views
1

Je veux ajouter le gradient canonique à seulement un arc spécifique dans mon cercle mais quand j'utilise QCanonicalGradient tout mon cercle sera remplir, j'ai essayé de rendre d'autres parties transparentes mais le gradient canonique interpolent entre l'autre partie que je veux être transparent, pourriez-vous m'aider s'il vous plaît comment puis-je interpoler seulement l'arc spécifique avec le gradient canonique? vous remercie à l'avance voici mon code: (je veux interpoler entre m_start et m_end)dessiner seulement un arc par Qconicalgradient pas plein cercle

QConicalGradient gradient(QPointF(m_xActualOuterRadius, m_yActualOuterRadius), 0.0); 
gradient.setColorAt(0.0, Qt::transparent); 
gradient.setColorAt(m_startColor, Qt::transparent); 
gradient.setColorAt(m_startColor, m_foregroundColor); 
gradient.setColorAt(m_endColor, m_foregroundColor.lighter()); 
gradient.setColorAt(1.0, Qt::transparent); 
+1

Avez-vous essayé 'peintre-> drawPie'? – Nejat

+0

je vous remercie beaucoup pour votre aide, je l'ai utilisé à ce moment, mais malheureusement, j'ai oublié de le marquer comme solution à mon problème. – mari

Répondre

0

Utilisez la méthode drawPie() dans QPainter avec QBrush où gradient installé.

Par exemple (je dessine sur pixmap, mais vous pouvez choisir quelque chose d'autre):

QPixmap pixmap(325,215); 

QPainter p(&pixmap);//we will paint on pixmap 

QConicalGradient gradient(QPointF(50, 50), 0.0);//your gradient 
gradient.setColorAt(0.0, Qt::blue);//colors which you want 
gradient.setColorAt(0.2, Qt::yellow); 
gradient.setColorAt(0.4, Qt::red); 
gradient.setColorAt(0.75,Qt::green); 
gradient.setColorAt(1.0, Qt::magenta); 
p.setBrush(QBrush(gradient));//set brush, it is our background and it will be gradient 

    QRectF rectangle(10.0, 20.0, 80.0, 60.0);//preparation for drawPie method 
    int startAngle = 30 * 16; 
    int spanAngle = 120 * 16; 
//it is from Qt documentstion, you can find best values for you 
    p.drawPie(rectangle, startAngle, spanAngle); 

    label->setPixmap(pixmap); //just show pixmap in label