diff --git a/components/circularprogress.cpp b/components/circularprogress.cpp index d24c780..b8754d0 100644 --- a/components/circularprogress.cpp +++ b/components/circularprogress.cpp @@ -182,10 +182,10 @@ void CircularProgress::paintEvent(QPaintEvent *event) QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); - painter.drawRect(rect()); - - painter.translate(width()/2, height()/2); - painter.rotate(d->delegate->angle()); + if (Material::IndeterminateProgress == d->progressType) { + painter.translate(width()/2, height()/2); + painter.rotate(d->delegate->angle()); + } QPen pen; pen.setCapStyle(Qt::RoundCap); @@ -206,6 +206,17 @@ void CircularProgress::paintEvent(QPaintEvent *event) } else { + painter.setPen(pen); + const qreal x = (width()-d->size)/2; + const qreal y = (height()-d->size)/2; + + const qreal a = 360*(value()-minimum())/(maximum()-minimum()); + + QPainterPath path; + path.arcMoveTo(x, y, d->size, d->size, 0); + path.arcTo(x, y, d->size, d->size, 0, a); + + painter.drawPath(path); } } diff --git a/components/progress.cpp b/components/progress.cpp index 5c77e7f..1164c4e 100644 --- a/components/progress.cpp +++ b/components/progress.cpp @@ -1,6 +1,7 @@ #include "progress.h" #include #include +#include #include "progress_p.h" #include "progress_internal.h" #include "lib/style.h" @@ -140,9 +141,13 @@ void Progress::paintEvent(QPaintEvent *event) brush.setColor(progressColor()); painter.setBrush(brush); - if (Material::IndeterminateProgress == d->progressType) { + if (Material::IndeterminateProgress == d->progressType) + { painter.drawRect(d->delegate->offset()*width()*2-width(), 0, width(), height()); - } else { - + } + else + { + qreal p = static_cast(width())*(value()-minimum())/(maximum()-minimum()); + painter.drawRect(0, 0, p, height()); } } diff --git a/examples/appbarexamples.cpp b/examples/appbarexamples.cpp index 3fd6a59..23cacbf 100644 --- a/examples/appbarexamples.cpp +++ b/examples/appbarexamples.cpp @@ -11,6 +11,10 @@ AppBarExamples::AppBarExamples(QWidget *parent) : QWidget(parent) { Progress *p = new Progress; + p->setProgressType(Material::DeterminateProgress); + p->setMinimum(0); + p->setMaximum(99); + p->setValue(22); QVBoxLayout *l = new QVBoxLayout; @@ -21,11 +25,17 @@ AppBarExamples::AppBarExamples(QWidget *parent) l->addWidget(p); CircularProgress *cp = new CircularProgress; - cp->setSize(30); + cp->setProgressType(Material::DeterminateProgress); + cp->setMinimum(0); + cp->setMaximum(99); + cp->setValue(90); l->addWidget(cp); QProgressBar *pb = new QProgressBar; + pb->setMinimum(0); + pb->setMaximum(99); + pb->setValue(50); QPushButton *b = new QPushButton;