2013-08-01 37 views
7

我不知道如何在進度條中部分改變文本的顏色,當其值接近50%時。這種效果會自動進入融合樣式進度條(下圖)。有誰知道這是如何完成的?如何使用其值更改QProgressBar文本的顏色?

Fusion style progress bar

+0

你有什麼問題的實施,所描述在提供的鏈接? –

+1

所以你建議有人寫代碼而不是你?樣式表不會幫助你。學習Qt的基礎知識是一個很好的觀點。 –

+0

問題是什麼?任何人都知道它是如何完成的。最有可能是編寫Fusion風格的人。但是你**想知道什麼? – Greenflow

回答

8

懶得寫工作示例代碼,更使得屏幕截圖。甚至沒有50個代表。 :-)

但是,這個問題有點有趣。我不知道這樣一個兩個彩色的文本可以如何完成。所以我檢查了: http://qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp Line 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)); 
    } 

基本上文本被繪製兩次到同一個矩形。每次都有適當的裁剪。如果你知道如何,很容易。 :-)

-3

您可以在容器控件使用樣式表:

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

這是不正確的... –

0

從我的觀點來看,最好的,而且可能是最簡單,方式做到這一點是改變了QProgressBar插件的托盤:

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