2012-02-20 6 views
7

Я бегу ubuntu 11.04. Это то, что мой прогресс бары выглядеть следующим образом:Изменить цвет QProgressBar

progress bar

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

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

... 

Я также попробовал вариант предложил here, но это не помогло.

+0

Документация на '' palette' и setPalette' говорит: * Внимание: Не используйте эту функцию в сочетании с таблицами стилей Qt. Возможно, это проблема? В этом случае вы можете попробовать 'style' и' setStyle'. Но это только моя догадка. – Frg

+0

Какая у вас ОС? Как выглядит индикатор выполнения в нем? – Dmitriy

+1

Если вы используете таблицы стилей, вы должны установить * все * не только один элемент. Покажите нам таблицу стилей, которую вы пробовали. – koan

ответ

6

Он попытался это:

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

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

в STYLESHEET для ProgressBar, и я получил эту enter image description here

так легко изменить фон панели в цвет, который вы хотите, и вы можете отобразить текст самостоятельно setFormat(). Он работает на вас?

+0

Да, это работает для меня. Но, как я сказал, мне очень сложно создать внешний вид, используя таблицы стилей, которые достаточно близки к тому, как выглядят обычные индикаторы выполнения. Вот почему я надеялся на решение, используя палитры. Спасибо за ваш ответ, хотя! – steps

+0

где писать эти коды? или как добавить его! спасибо –

3

Использование цветовой роли «Выделение» делает трюк в моем случае (с использованием стиля Plastique).

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

также, вы можете сделать 'p.setColor (QPalette :: Base, Qt :: red);' если вы хотите стилизовать фон строки выполнения. –

+0

Это, к сожалению, полностью игнорируется стилем GTK. –

2

Я тоже была эта проблема, но я найти способ, с помощью этого сайта: http://thesmithfam.org/blog/2009/10/13/cool-qprogressbar-stylesheet/

, но я просто хотел, чтобы изменить цвет, а не сам ProgressBar. поэтому я избавился от первой линии и немного изменил вторую.

Наконец-то я получил то, что хотел.

Во-первых это сделать:

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); 
Смежные вопросы