2013-08-01 6 views
7

Non so come modificare il colore del testo parzialmente nella barra di avanzamento quando il suo valore diventa quasi del 50%. Questo effetto viene automaticamente nella barra di avanzamento dello stile di fusione (immagine sotto). Qualcuno sa come è fatto?Come cambiare il colore del testo di un QProgressBar con il suo valore?

Fusion style progress bar

+0

Che problemi hai con implementazione, che descriveva nel link fornito? –

+1

Quindi tu proponi qualcuno a scrivere codice al posto tuo? I fogli di stile non ti aiuteranno. È un buon punto per imparare le basi di Qt. –

+0

Qual è la domanda? Qualcuno sa per certo come è fatto. Molto probabilmente colui che ha scritto lo stile Fusion. Ma cosa vuoi ** tu ** vuoi sapere? – Greenflow

risposta

8

Troppo pigro per scrivere lavorare codice di esempio, e tanto meno fare uno screenshot. Neanche per 50 ripetizioni. :-)

Tuttavia, la domanda era piuttosto interessante. Non avevo idea di come un testo così colorato potesse essere fatto. Quindi ho controllato: http://qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp Riga 1450ff (http://qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp#line1450).

QRegion rightRect = rect; 
    rightRect = rightRect.subtracted(leftRect); 
    painter->setClipRegion(rightRect); 
    painter->setPen(flip ? alternateTextColor : textColor); 
    painter->drawText(rect, 
         bar->text, 
         QTextOption(Qt::AlignAbsolute| 
            Qt::AlignHCenter| 
            Qt::AlignVCenter)); 
    if (!leftRect.isNull()) 
    { 
     painter->setPen(flip ? textColor : alternateTextColor); 
     painter->setClipRect(leftRect); 
     painter->drawText(rect, 
       bar->text, 
       QTextOption(Qt::AlignAbsolute| 
           Qt::AlignHCenter| 
           Qt::AlignVCenter)); 
    } 

Fondamentalmente il testo viene disegnato due volte nello stesso rettangolo. Ogni volta con un ritaglio appropriato. Facile se sai come. :-)

-3

È possibile utilizzare fogli di stile sul contenitore Widget:

myMainWidget.setStyleSheet(QString("QProgressBar {color: red}")); 
+0

Questo non è corretto ... –

0

Dal mio punto di vista il migliore, e probabilmente il più facile, modo per farlo è quello di cambiare il pallet per il widget QProgressBar:

QPalette palette = progressBar->palette() 
    palette.setColor(QPalette::Text, textColor) 
    palette.setColor(QPalette::HighlightedText, textColor) 
    progressBar->setPalette(palette)