梯度块在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

分块

谢谢大家!

只能删除:

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
}

您无法使用现有的样式表属性实现您想要的效果。然而,您可以子类QProgressBar并重新实现paint,以获得您希望的外观。

这样的东西会工作,但我更喜欢子类化QProgressBar作为webelectic说

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() ;
}

相关内容

  • 没有找到相关文章

最新更新