Градиент для кусков в QProgressBar - PullRequest
2 голосов
/ 02 декабря 2011

Можно ли установить общий градиент для всех 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

разделить на куски.

Спасибо за все!

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Вы должны удалить только:

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
}
0 голосов
/ 02 декабря 2011

что-то вроде этого будет работать, но я бы предпочел создать подкласс 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() ;
}
0 голосов
/ 02 декабря 2011

Вы не можете достичь того, чего хотите, с существующими свойствами таблицы стилей. Однако вы можете создать подкласс QProgressBar и переопределить paint, чтобы получить желаемую внешность.

...