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