如何更改Qt ProgressBar颜色?

时间:2018-10-24 10:48:20

标签: qt

我想将进度条的颜色从默认的绿色更改为红色。我有这段代码,但是视图是“平坦的”,我想实现类似“ 3d效果”的效果,如下图所示:

enter image description here

红色PB的代码:

QPalette pal = ui->pbExtractionWidget->palette();
pal.setColor(QPalette::Normal, QColor(Qt::red));
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;}";
 ui->pbExtractionWidget->setStyleSheet(danger);

外观如下:

enter image description here

2 个答案:

答案 0 :(得分:0)

This link provides a way to style the progressbar.

This link provides a way to change gradient color for widgets.

基本上,您只需要正确更改样式表即可。每个块都是进度条的一部分。

或者使用QPalette,它使用Base为小部件的背景着色。正确设置其gradient,然后执行以下操作。

palette.setBrush( QPalette::Base, gradientVariable);
ui->pbExtractionWidget->setPalette(palette);

答案 1 :(得分:0)

// In main.cpp
qDebug() << QStyleFactory::keys();
// If keys contains e.g. 'Fusion' it would be possible to change color of QProgressBar.
// On windows default style is 'Windows' and color can only be change with style sheets.
auto style = QStyleFactory::create("Fusion");
if (style) {
  app.setStyle(style);
}

class MyProgressBar final : public QProgressBar {
  void paintEvent(QPaintEvent*) final {
    QStyleOptionProgressBar option{};
    initStyleOption(&option);
    option.textAlignment = Qt::AlignHCenter;
    option.palette.setColor(QPalette::Highlight, QColor("lightskyblue"));
    option.palette.setColor(QPalette::HighlightedText, option.palette.color(QPalette::Text));
    QPainter painter{this};
    style()->drawControl(QStyle::CE_ProgressBar, &option, &painter, this);
  }
};