Изменить цвет QProgressBar - PullRequest
       21

Изменить цвет QProgressBar

13 голосов
/ 21 февраля 2012

Я использую Ubuntu 11.04.Вот как выглядят мои индикаторы выполнения:

progress bar

Я показываю индикаторы выполнения в окне пакетной обработки (по одному на элемент партии) и хотел бы использовать их в качестве статусаиндикатор (зеленый, пока все идет хорошо, красный в случае ошибок, ...).

Я попробовал несколько предложений, в том числе те, которые были сделаны на этот почти идентичный вопрос.К сожалению, я не смог заставить его работать, и документация по настройке 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);
}

...

Я также попробовал версию, предложенную здесь , но это тоже не помогло.

Ответы [ 3 ]

12 голосов
/ 24 мая 2012

Он пробовал это:

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

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

как таблица стилей для индикатора выполнения, и я получил это enter image description here

, поэтому легко изменить фон панели на нужный вам цвет, и вы можете отобразить текст самостоятельно с помощью setFormat(). Это работает для вас?

5 голосов
/ 19 декабря 2013

У меня тоже была эта проблема, но я нашел способ с помощью этого сайта: 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);
3 голосов
/ 03 сентября 2013

Использование цветовой роли «Highlight» помогает мне в моем случае (в стиле Plastique).

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