Gradient pour les morceaux dans QProgressBar
-
27-10-2019 - |
Question
Est-il possible de définir un gradient commun pour tous les morceaux de QProgressBar
?
Si l'on utilise quelque chose comme ceci:
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;
}
le résultat sera
http://labs.trolltech.com/ blogs / wp-content / uploads / 2007/06 / progressbar_righttext.png
mais je veux obtenir un gradient, étendu à tous les morceaux. Comme ceci:
http://labs.trolltech.com/ blogs / wp-content / uploads / 2007/06 / progressbar_nochunk.png
divisé sur les morceaux.
Merci pour tout!
La solution
Vous ne pouvez pas obtenir ce que vous voulez avec les propriétés de feuille de style existantes. Vous pourriez cependant sous-classe QProgressBar
et réimplémenter le paint
afin d'obtenir l'apparence que vous souhaitez.
Autres conseils
Vous ne devez supprimer:
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
}
quelque chose comme ça fonctionnerait, mais je préfère le sous-classement QProgressBar comme webclectic dit
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() ;
}