2017-03-14 52 views
0

我可以在qt中做圓形進度條,同時重寫widget的paintEvent並繪製圓形進度條,但在主圓形進度條後面有第二個圓形進度條(不能繪製像這樣)的困難:Qt中的自定義圓形進度條

enter image description here

任何人都可以指導我?事先感謝。

+0

什麼是第二個圓形進度條? – eyllanesc

+0

@eyllanesc孵化圓形...在圖像中。在藍色進度條 – elgolondrino

+0

請發佈一些相關代碼,或者最好是[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。 –

回答

1

我沒有看到這裏有什麼問題,您可以使用QPainterPath並添加完整或部分的弧路徑,然後使用Qt::DotLine樣式通過QPen繪製路徑。

如果股票虛線不是爲你工作,有通過選項specify a custom pattern

void QPen::setDashPattern(const QVector<qreal> & pattern) 

下面是一個簡單的例子,看起來像這樣:

enter image description here

class CPBar : public QWidget { 
    Q_OBJECT 
    qreal p; // progress 0.0 to 1.0 
    public: 
    CPBar(QWidget * p = 0) : QWidget(p), p(0) { 
     setMinimumSize(208, 208); 
    } 
    void upd(qreal pp) { 
     if (p == pp) return; 
     p = pp; 
     update(); 
    } 
    void paintEvent(QPaintEvent *) { 
    qreal pd = p * 360; 
    qreal rd = 360 - pd; 
    QPainter p(this); 
    p.fillRect(rect(), Qt::white); 
    p.translate(4, 4); 
    p.setRenderHint(QPainter::Antialiasing); 
    QPainterPath path, path2; 
    path.moveTo(100, 0); 
    path.arcTo(QRectF(0, 0, 200, 200), 90, -pd); 
    QPen pen, pen2; 
    pen.setCapStyle(Qt::FlatCap); 
    pen.setColor(QColor("#30b7e0")); 
    pen.setWidth(8); 
    p.strokePath(path, pen); 
    path2.moveTo(100, 0); 
    pen2.setWidth(8); 
    pen2.setColor(QColor("#d7d7d7")); 
    pen2.setCapStyle(Qt::FlatCap); 
    pen2.setDashPattern(QVector<qreal>{0.5, 1.105}); 
    path2.arcTo(QRectF(0, 0, 200, 200), 90, rd); 
    pen2.setDashOffset(2.2); 
    p.strokePath(path2, pen2); 
    } 
}; 

class Test : public QWidget { 
    Q_OBJECT 
    public: 
    Test() { 
     QVBoxLayout * l = new QVBoxLayout(this); 
     CPBar * p = new CPBar; 
     QSlider * s = new QSlider(Qt::Horizontal, this); 
     s->setMinimum(0); 
     s->setMaximum(100); 
     l->addWidget(p); 
     l->addWidget(s); 
     setLayout(l); 
     connect(s, &QSlider::valueChanged, [=](){ p->upd((qreal)s->value()/s->maximum());}); 
    } 
}; 
+0

我以前試過,但那不是我想要的 – elgolondrino

+0

這就是你如何從圖像中獲得結果。 – dtech

+0

我只使用了'dashedPattern',但它在360中給了我一些圈子。它們比我預期的要大 – elgolondrino