2011-12-02 22 views
2

是否可以为所有QProgressBar块设置一个通用渐变?QProgressBar中的块的渐变

如果使用这样的事情:

QProgressBar::chunk:horizontal { 
background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, 
          stop: 0 green, 
          stop: 1 white); 
margin-right: 2px;  
width: 10px; 
} 

结果将是

http://labs.trolltech.com/blogs/wp-content/uploads/2007/06/progressbar_righttext.png

,但我想获得一个梯度,延伸到所有的块。就像这样:

http://labs.trolltech.com/blogs/wp-content/uploads/2007/06/progressbar_nochunk.png

划分到块。

谢谢大家!

回答

0

你无法用现有的样式表属性达到你想要的。但是,您可以继承QProgressBar并重新实​​现paint以获得所需的外观。

0

像这样的工作,但我宁愿继承QProgressBar作为webclectic说

class Wrapper : public QWidget 
{ 
    Q_OBJECT 

     QProgressBar *progressBar ; 
     QSlider *slider ; 

    public : 

     Wrapper(void) : QWidget(), progressBar(new QProgressBar), slider(new QSlider(Qt::Horizontal)) 
     { 
      progressBar->setMinimum(0) ; 
      progressBar->setMaximum(100) ; 
      slider->setMinimum(0) ; 
      slider->setMaximum(100) ; 
      QVBoxLayout *l = new QVBoxLayout ; 
      setLayout(l) ; 
      l->addWidget(progressBar) ; 
      l->addWidget(slider) ; 
      slider->setValue(0) ; 
      connect(slider, SIGNAL(valueChanged(int)), SLOT(slider_value_changed(int))) ; 
      slider_value_changed(0) ; 
     } 

    protected slots : 

     void slider_value_changed(int new_value) 
     { 
      QString updated_bg = QString("background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0.0 green, stop: %0 white, stop: 1.0 white);").arg(new_value/100.0) ; 
      QString style_sheet ; 
      style_sheet += QString("QProgressBar {" 
          "%0" 
          "border: 2px solid grey;" 
          "border-radius: 5px;" 
          "text-align: center;" 
          "}").arg(updated_bg) ; 
      style_sheet += "QProgressBar::chunk {" 
          "background: transparent;" 
          "width: 10px;" 
          "margin: 0.5px;" 
          "}" ; 
      progressBar->setStyleSheet(style_sheet) ; 
      progressBar->setValue(new_value) ; 
     } 
} ; 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv) ; 

    Wrapper w ; 

    w.show() ; 

    return app.exec() ; 
} 
1

您必须只删除:

QProgressBar::chunk:horizontal { 
    background: qlineargradient(x1: 0, 
           y1: 0.5, 
           x2: 1, 
           y2: 0.5, 
           stop: 0 green, 
           stop: 1 white); 
    margin-right: 2px; 
    width: 10px; // <------ remove this propierty 
}