class Widget2 : public QWidget
{
Q_OBJECT
public:
Widget2(QWidget *parent = nullptr);
~Widget2();
void setPercentage(qreal value);
protected:
void paintEvent(QPaintEvent *event) override;
private:
qreal percentage{0};
};
void Widget2::setPercentage(qreal value)
{
this->percentage = value;
update();
}
int getStartAngle(int angle)
{
if(angle <= 180)
{
return (180 - angle) / 2 * 16;
}
else
{
return -(angle - 180) / 2 * 16;
}
}
void Widget2::paintEvent(QPaintEvent *event)
{
auto rect = this->rect();
qreal realSize = qMin(rect.width(), rect.height());
qreal width = 50;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(rect.width()/2, rect.height()/2);
painter.scale(realSize/1000, realSize/1000);
QRectF rectangle(-500.0, -500.0, 1000.0, 1000.0);
rectangle.adjust(width,width,-width,-width);
int angle = 270;
int spanAngle = angle * 16;
int startAngle = getStartAngle(angle);
//滑槽
painter.setPen(QPen(QColor("#c8c8c8"),width,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
painter.drawArc(rectangle.adjusted(10,10,-10,-10), startAngle, spanAngle);
startAngle = startAngle + spanAngle;
spanAngle = -angle * percentage * 16;
painter.setPen(QPen(QBrush(QGradient(QGradient::StrongBliss)),width,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
painter.drawArc(rectangle.adjusted(10,10,-10,-10), startAngle, spanAngle);
painter.setPen(Qt::black);
painter.setFont(QFont("隶书",50));
painter.drawText(rectangle,Qt::AlignCenter,QString("%1%").arg(percentage * 100));
}