Frage

Ist es möglich, einen gemeinsamen Gradienten für alle QProgressBar-Chunks festzulegen?

Wenn Sie so etwas verwenden:

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

das Ergebnis ist

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

aber ich möchte einen Gradienten erhalten, der auf alle Teile ausgedehnt ist.So:

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

in Stücke geteilt.

Danke für alles!

War es hilfreich?

Lösung

Mit den vorhandenen Stylesheet-Eigenschaften können Sie nicht das erreichen, was Sie wollen.Sie können jedoch den QProgressBar in eine Unterklasse unterteilen und den paint erneut implementieren, um das gewünschte Erscheinungsbild zu erhalten.

Andere Tipps

Sie müssen nur entfernen:

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
}

so etwas würde funktionieren, aber ich würde es vorziehen, QProgressBar in Unterklassen zu unterteilen, wie webclectic sagte

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top