15

我正在运行 ubuntu 11.04。这是我的进度条的样子:

进度条

我在批处理窗口中显示进度条(每个批处理项目一个),并希望将它们用作状态指示器(一切顺利时为绿色,出现错误时为红色,...)。

我尝试了几个建议,包括对这个几乎相同的问题提出的建议。不幸的是,我无法让它工作,关于自定义 QProgressBars 的文档也对我没有帮助,所以我非常感谢任何关于我做错了什么的建议。

我按照建议对 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);
}

...

我也尝试了这里建议的版本,但这也没有帮助。

4

3 回答 3

13

它尝试了这个:

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

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

作为进度条的样式表,我得到了这个 在此处输入图像描述

所以很容易将栏的背景更改为您想要的颜色,您可以自己显示文本setFormat()。它对你有用吗?

于 2012-05-24T17:06:27.860 回答
7

我也有这个问题,但我找到了一个方法,在这个网站的帮助下: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);
于 2013-12-19T06:27:57.610 回答
6

在我的案例中使用“突出显示”颜色角色可以解决问题(使用 Plastique 样式)。

QPalette p = palette();
p.setColor(QPalette::Highlight, Qt::green);
setPalette(p);
于 2013-09-03T10:08:13.077 回答