2011-12-02 19 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 
}