QT 圆盘百分比

ops/2024/12/16 1:11:07/

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_OBJECTpublic: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);

效果:


http://www.ppmy.cn/ops/42445.html

相关文章

Python爬虫入门到进阶:解锁网络数据的钥匙

Python爬虫入门到进阶&#xff1a;解锁网络数据的钥匙 一、Python爬虫基础1.1 爬虫基本概念1.2 Python爬虫必备库1.3 第一个爬虫示例 二、实战爬虫实例2.1 爬取天气数据2.2 高级技巧&#xff1a;异步爬虫 三、反爬机制与应对策略3.1 常见反爬机制3.2 应对策略 四、性能优化与安…

php基础笔记

开端&#xff1a; PHP 脚本可以放在文本的任意位置 PHP 脚本以 开始&#xff0c;以 ?>** 结束&#xff1a; PHP 文件的默认文件扩展名是 ".php" 标签替换 <? echo 123;?> //short_open_tagson 默认开启 <?(表达式)?> 等价于 <?php echo …

PS —— 制作证件照

PS —— 制作证件照 裁剪工具魔棒工具油漆桶工具扩展画布 老是看编程&#xff0c;会有些疲劳&#xff0c;这个专栏我会放一些其他的知识&#xff0c;我们今天利用PS制作证件照&#xff08;注意&#xff0c;这里一些ps的基础操作我不会很展开的去讲&#xff09;&#xff1a; 裁…

在 Keras 中使用 LSTM 层

在 Keras 中使用 LSTM 层时&#xff0c;不需要在全连接层&#xff08;Dense 层&#xff09;前面添加展平层&#xff08;Flatten 层&#xff09;。这是因为 LSTM 层的输出已经是一个一维向量&#xff0c;可以直接作为 Dense 层的输入。下面详细解释这个问题。 ### LSTM 层的输出…

如何秒杀Promise面试题

如何秒杀Promise面试题 如果你在面试的时候技术面给你出了点关于Promise的面试题首先不要慌&#xff0c;先问候他爹妈一套问候语&#xff01; 然后切记不要(ps:这是病句别在意!&#x1f923;) 自己想 找他要纸和笔 首先关于promise的面试题无非就是 promise 的状态和宏队列、…

摸鱼大数据——Hadoop基础理论知识之ZooKeeper1-3

1、ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。HA搭建&#xff1b;管理去中心化的集群&#xff08;例如Kafka&#xff09; ZooKeeper结构: 采用树形…

Web 安全基础:如何正确设置 HTTP 头信息

如何设置正确的网站安全头部 近年来&#xff0c;推出“安全评分卡”的公司如雨后春笋般涌现&#xff0c;这已开始成为企业销售过程中的一个考量因素。我从客户那里了解到&#xff0c;他们对于那些被评为低分的供应商持有顾虑&#xff0c;并且至少有一次是基于这种评分初步改变…

如何轻松访问 Android 手机和平板电脑上的内部存储

概括 在数字设备领域&#xff0c;我们的智能手机充当虚拟金库&#xff0c;在其范围内存储个人数据、珍贵记忆和重要信息的宝库。因此&#xff0c;我们将指导您如何访问 Android 上的内部存储&#xff0c;确保您可以安全、轻松地检查内部文件系统并管理文件。同时&#xff0c;您…