Pregunta

¿Es posible establecer un gradiente común para todos? QProgressBar trozos?

Si usa algo como esto:

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

el resultado será

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

pero quiero obtener un gradiente único, extendido a todos los fragmentos.Como esto:

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

dividido en trozos.

¡Gracias por todo!

¿Fue útil?

Solución

No puede lograr lo que desea con las propiedades de la hoja de estilo existente.Sin embargo, podrías subclasificar QProgressBar y reimplementar el paint para conseguir la apariencia que deseas.

Otros consejos

Sólo debes eliminar:

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
}

algo como esto funcionaría, pero preferiría subclasificar QProgressBar como dijo 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() ;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top