2012-02-20 120 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);