2012-02-20 32 views
7

我正在運行ubuntu 11.04。這就是我的進度條的樣子:更改QProgressBar的顏色

progress bar

我顯示在批處理窗口中的進度條(每批項目之一),並想用它們作爲一個狀態指示燈(綠色,而所有的進展順利,發生錯誤時爲紅色,......)。

我已經嘗試了幾個建議,其中包括this幾乎相同的問題。不幸的是,我無法讓它工作,並且定製QProgressBars的documentation也無法幫助我,所以我會非常感謝任何關於我做錯了什麼的建議。

我已經按照建議子類化了QProgressBar,並嘗試使用樣式表以及調色板(不是在同一時間,而是作爲替代方法)。對於樣式表,我無法讓它看起來像常規進度條。改變顏色真的是我想要做的,所以我想通過使用調色板而不是樣式表來實現這一點要容易得多,但調色板根本沒有任何反應。

這裏是我試過的調色板的版本之一:

#include "myprogressbar.h" 

#include <QtGui/QPalette> 

MyProgressBar::MyProgressBar(QWidget *parent) : 
    QProgressBar(parent) 
{} 

void MyProgressBar::onProgress(int value, int maximum, QString phase) 
{ 
    setMaximum(maximum); 
    setValue(value); 
    setFormat(phase); 

    QPalette p = this->palette(); 
    p.setColor(QPalette::Highlight, QColor(Qt::green)); 
    this->setPalette(p); 
} 

... 

我也試過版本建議here,但這並沒有幫助。

+0

文檔上'palette'和'setPalette'說:*警告:不要在結合使用此功能與Qt樣式表。*也許這是問題?在這種情況下,你可以嘗試'style'和'setStyle'。但這只是我的猜測。 – Frg 2012-02-20 22:28:05

+0

什麼是您的操作系統?進度條如何看起來像它? – Dmitriy 2012-02-20 22:53:18

+1

如果你使用樣式表,那麼你必須設置*所有*不只是一個單一的元素。向我們展示您嘗試過的樣式表。 – koan 2012-02-20 23:40:26

回答

6

它嘗試這樣做:

QProgressBar { 
    border: 2px solid grey; 
    border-radius: 5px; 
    background-color: #FF0000; 
} 

QProgressBar::chunk { 
    background-color: #05B8CC; 
    width: 20px; 
} 

的樣式表的進度,我得到這個enter image description here

所以很容易改變的吧你想要的顏色的背景,並可以顯示文字自己與setFormat()。它對你有用嗎?

+0

是的,這對我很有用。但正如我所說,我發現使用足夠接近常規進度條的樣式表很難創建一個外觀。這就是爲什麼我希望使用調色板的解決方案。謝謝你的回答! – steps 2012-05-29 16:25:53

+0

在哪裏寫這個代碼?或如何添加它!感謝 – 2017-09-21 16:52:58

3

使用「突出」顏色​​角色在我的情況下(使用Plastique風格)伎倆。

QPalette p = palette(); 
p.setColor(QPalette::Highlight, Qt::green); 
setPalette(p); 
+1

也,你可以做'p.setColor(QPalette :: Base,Qt :: red);'如果你想風格的進度條的背景。 – 2015-09-17 17:24:26

+0

可悲的是,這完全被GTK風格所忽略。 – 2016-12-15 10:16:53

2

我有這個問題,但我卻找到一種方法,與本網站的幫助: http://thesmithfam.org/blog/2009/10/13/cool-qprogressbar-stylesheet/

,但我只是想改變顏色,而不是進度本身。所以我擺脫了第一行,並稍微改變了第二行。

最後我得到了我想要的。

首先做到這一點:

QString danger = "QProgressBar::chunk {background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #FF0350,stop: 0.4999 #FF0020,stop: 0.5 #FF0019,stop: 1 #FF0000);border-bottom-right-radius: 5px;border-bottom-left-radius: 5px;border: .px solid black;}"; 
QString safe= "QProgressBar::chunk {background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #78d,stop: 0.4999 #46a,stop: 0.5 #45a,stop: 1 #238);border-bottom-right-radius: 7px;border-bottom-left-radius: 7px;border: 1px solid black;}"; 

現在,所有你需要做的是:

if(ui->progressbar->value()<80) 
    ui->progressbar->setStyleSheet(danger); 
else 
    ui->progressbar->setStyleSheet(safe);