Farbverlauf für Chunks in QProgressBar
-
27-10-2019 - |
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!
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() ;
}