QT 圆盘百分比

1.

/* 设置抗锯齿 */
    painter.setRenderHints(QPainter::Antialiasing, true);
    /* 最外层的圆 */
    QRect drawRect = event->rect();
    QRadialGradient gradient1(drawRect.center(),
                              drawRect.width() / 2,
                              drawRect.center());
    gradient1.setColorAt(0, Qt::transparent);
    gradient1.setColorAt(0.5, Qt::transparent);// 稍微增加透明部分的范围
    gradient1.setColorAt(0.51, QColor("#00237f"));// 开始显示深蓝色
    gradient1.setColorAt(0.58, QColor("#00237f"));// 保持深蓝色一段时间
    gradient1.setColorAt(0.59, Qt::transparent);// 渐变回透明
    gradient1.setColorAt(1, Qt::transparent);
    painter.setBrush(gradient1);
    painter.setPen(Qt::NoPen);
    painter.drawEllipse(drawRect);
 
    /* 里层的圆 */
    QRadialGradient gradient2(drawRect.center(),
                              drawRect.width() / 2,
                              drawRect.center());
    gradient2.setColorAt(0, Qt::transparent);
    gradient2.setColorAt(0.420, Qt::transparent);
    gradient2.setColorAt(0.421, QColor("#885881e3"));
    gradient2.setColorAt(0.430, QColor("#5881e3"));
    gradient2.setColorAt(0.440, QColor("#885881e3"));
    gradient2.setColorAt(0.441, Qt::transparent);
    gradient2.setColorAt(1, Qt::transparent);
    painter.setBrush(gradient2);
    painter.setPen(Qt::NoPen);
    painter.drawEllipse(drawRect);
 
    /* 数字 */
    QFont font;
    font.setPixelSize(drawRect.width() / 10);
    painter.setPen(Qt::white);
    painter.setFont(font);
    painter.drawText(drawRect, Qt::AlignCenter,
                     QString::number(angleLength * 100 / 360) + "%");
 
    /* 发光背景圆 */
    painter.translate(drawRect.width() >> 1, drawRect.height() >> 1);
    int radius = drawRect.width() / 2;
    /* radius<< 1(左移1位)相当于radius*2 */
    QRectF rect(-radius, -radius, radius << 1, radius << 1);
 
    QRadialGradient gradient3(0, 0, radius);
    gradient3.setColorAt(0, Qt::transparent);
    gradient3.setColorAt(0.42, Qt::transparent);
    gradient3.setColorAt(0.51, QColor("#500194d3"));
    gradient3.setColorAt(0.55, QColor("#22c1f3f9"));
    gradient3.setColorAt(0.58, QColor("#500194d3"));
    gradient3.setColorAt(0.68, Qt::transparent);
    gradient3.setColorAt(1.0, Qt::transparent);
    painter.setBrush(gradient3);
    QPainterPath path1;
    path1.arcTo(rect, startAngle, -angleLength);
    painter.setPen(Qt::NoPen);
    painter.drawPath(path1);
 
    /* 发光圆/弧 */
    QRadialGradient gradient4(0, 0, radius);
    gradient4.setColorAt(0, Qt::transparent);
    gradient4.setColorAt(0.49, Qt::transparent);
    gradient4.setColorAt(0.50, QColor("#4bf3f9"));
    gradient4.setColorAt(0.59, QColor("#4bf3f9"));
    gradient4.setColorAt(0.60, Qt::transparent);
    gradient4.setColorAt(1.0, Qt::transparent);
    painter.setBrush(gradient4);
    QPainterPath path2;
    path2.arcTo(rect, startAngle, -angleLength);
    painter.setPen(Qt::NoPen);
    painter.drawPath(path2);
 
    /* 恢复状态 */
    painter.restore();
 
    /* 设置事件对象的accept标志 */
    event->accept();


#include "arcgraph.h"

ArcGraph::ArcGraph(QWidget *parent)
    : QWidget(parent),
      startAngle(90),
      angleLength(100)
{
    this->setMinimumSize(100, 100);
    setAttribute(Qt::WA_TranslucentBackground, true);
}

ArcGraph::~ArcGraph()
{
}

void ArcGraph::setstartAngle(int angle)
{
    startAngle = angle;
    this->repaint();
}

void ArcGraph::setangleLength(int length)
{
    angleLength = length;
    this->repaint();
}

void ArcGraph::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    /* 保存状态 */
    painter.save();

    /* 设置抗锯齿 */
    painter.setRenderHints(QPainter::Antialiasing, true);

    /* 最外层的圆 */
    QRect drawRect = event->rect();
    QRadialGradient gradient1(drawRect.center(),
                              drawRect.width() / 2,
                              drawRect.center());
    gradient1.setColorAt(0, Qt::transparent);
    gradient1.setColorAt(0.5, Qt::transparent);// 稍微增加透明部分的范围
    gradient1.setColorAt(0.51, QColor("#00237f"));// 开始显示深蓝色
    gradient1.setColorAt(0.58, QColor("#00237f"));// 保持深蓝色一段时间
    gradient1.setColorAt(0.59, Qt::transparent);// 渐变回透明
    gradient1.setColorAt(1, Qt::transparent);
    painter.setBrush(gradient1);
    painter.setPen(Qt::NoPen);
    painter.drawEllipse(drawRect);

    /* 里层的圆 */
    QRadialGradient gradient2(drawRect.center(),
                              drawRect.width() / 2,
                              drawRect.center());
    gradient2.setColorAt(0, Qt::transparent);
    gradient2.setColorAt(0.420, Qt::transparent);
    gradient2.setColorAt(0.421, QColor("#885881e3"));
    gradient2.setColorAt(0.430, QColor("#5881e3"));
    gradient2.setColorAt(0.440, QColor("#885881e3"));
    gradient2.setColorAt(0.441, Qt::transparent);
    gradient2.setColorAt(1, Qt::transparent);
    painter.setBrush(gradient2);
    painter.setPen(Qt::NoPen);
    painter.drawEllipse(drawRect);

    /* 数字 */
    QFont font;
    font.setPixelSize(drawRect.width() / 10);
    painter.setPen(Qt::white);
    painter.setFont(font);
    painter.drawText(drawRect, Qt::AlignCenter,
                     QString::number(angleLength * 100 / 360) + "%");

    /* 发光背景圆 */
    painter.translate(drawRect.width() >> 1, drawRect.height() >> 1);
    int radius = drawRect.width() / 2;
    /* radius<< 1(左移1位)相当于radius*2 */
    QRectF rect(-radius, -radius, radius << 1, radius << 1);

    QRadialGradient gradient3(0, 0, radius);
    gradient3.setColorAt(0, Qt::transparent);
    gradient3.setColorAt(0.42, Qt::transparent);
    gradient3.setColorAt(0.51, QColor("#500194d3"));
    gradient3.setColorAt(0.55, QColor("#22c1f3f9"));
    gradient3.setColorAt(0.58, QColor("#500194d3"));
    gradient3.setColorAt(0.68, Qt::transparent);
    gradient3.setColorAt(1.0, Qt::transparent);
    painter.setBrush(gradient3);
    QPainterPath path1;
    path1.arcTo(rect, startAngle, -angleLength);
    painter.setPen(Qt::NoPen);
    painter.drawPath(path1);

    /* 发光圆/弧 */
    QRadialGradient gradient4(0, 0, radius);
    gradient4.setColorAt(0, Qt::transparent);
    gradient4.setColorAt(0.49, Qt::transparent);
    gradient4.setColorAt(0.50, QColor("#4bf3f9"));
    gradient4.setColorAt(0.59, QColor("#4bf3f9"));
    gradient4.setColorAt(0.60, Qt::transparent);
    gradient4.setColorAt(1.0, Qt::transparent);
    painter.setBrush(gradient4);
    QPainterPath path2;
    path2.arcTo(rect, startAngle, -angleLength);
    painter.setPen(Qt::NoPen);
    painter.drawPath(path2);

    /* 恢复状态 */
    painter.restore();

    /* 设置事件对象的accept标志 */
    event->accept();
}

#ifndef ARCGRAPH_H
#define ARCGRAPH_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>

/* 蓝色科技感弧形视图 */
class ArcGraph : public QWidget
{
    Q_OBJECT

public:
    ArcGraph(QWidget *parent = nullptr);
    ~ArcGraph();

    void setstartAngle(int);
    void setangleLength(int);

private:
    void paintEvent(QPaintEvent *event);
    int startAngle;
    int angleLength;
};
#endif // ARCGRAPH_H

应用:

ArcGraph *arcGraph=new ArcGraph;
arcGraph->setangleLength(als.toUInt() * 360 / 65535);

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chilian12321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值