QPaint绘制自定义仪表盘组件02

网上视频抄的,用来自己看一下,看完就删掉

最终效果

ui,创建一个空的widget

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QTimer>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected:void paintEvent(QPaintEvent *event) override;private:Ui::Widget *ui;int maxValue = 50;int minValue = 0;int curValue = 20;QTimer *timer;
};
#endif // WIDGET_H

widget.cpp 

#include "widget.h"
#include "ui_widget.h"
#include <QPolygon>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, [=]() {curValue += 1;if (curValue > maxValue) {curValue = minValue;}update();});timer->start(100);
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{(void)event;QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 将painter移动到中心位置painter.translate(rect().center());// 画一个带有渐变色的圆圈// 镜像渐变QRadialGradient ra(0, 0, qMin(width(), height() / 2));// 设置起点颜色ra.setColorAt(0, Qt::green);// 终点颜色ra.setColorAt(1, Qt::cyan);painter.setBrush(ra);painter.setPen(Qt::NoPen);painter.drawEllipse(QPoint(0, 0), qMin(width(), height()) / 2, qMin(width(), height()) / 2);qreal angle = 270 * 1.0 / (maxValue - minValue);// 135°为刻度的起始点对应的角度painter.rotate(135);// 绘制刻度线painter.setPen(QPen(Qt::white, 4));painter.setFont(QFont("微软雅黑", 18));for (int i = minValue; i <= maxValue; ++i) {if (i % 10 == 0) {if (135 + angle * i < 270) {painter.rotate(180);painter.drawText(-qMin(width(), height()) / 2 + 30, 10, QString::number(i));painter.rotate(-180);} else {painter.drawText(qMin(width(), height()) / 2 - 20 - 50, 10, QString::number(i));}// 第一个参数是起始点的 x 坐标,第二个参数是起始点的 y 坐标,第三个参数是终止点的 x 坐标,第四个参数是终止点的 y 坐标。painter.drawLine(qMin(width(), height()) / 2 - 20, 0, qMin(width(), height()) / 2, 0);} else {painter.drawLine(qMin(width(), height()) / 2 - 10, 0, qMin(width(), height()) / 2, 0);}painter.rotate(angle);}// 刻度画完后,将painter旋转至水平向下的角度,以便在中心位置绘制文字// 之前时顺时针旋转的,现在逆时针旋转45°就可以了painter.rotate( - angle - 45);// 绘制一个圆圈// `painter.drawEllipse()` 函数的第二个和第三个参数分别表示椭圆的半长轴长度和半短轴长度。painter.drawEllipse(QPoint(0, 0), 100, 100);// 绘制文字// QRect(-100, -100, 200, 200)是一个矩形,其四个数字分别表示矩形的左上角坐标 `(x, y)` 和矩形的宽度和高度 `(w, h)`。// 以坐标原点为中心的 200x200 的矩形内绘制一个字符串// 矩形的左上角的坐标是 `(-100, -100)`,也就是在坐标原点的左上角位置偏移了 100 个像素的位置。// 这里的 `-100` 表示的是相对于坐标空间原点的坐标偏移量,而不是屏幕上的实际像素值。// 这个矩形的宽度和高度均为 `200`,因此其右下角的坐标为 `(100, 100)`。// 参数 `Qt::AlignCenter` 表示绘制文本时文字水平和竖直方向的对齐方式。// 这里使用了 `Qt::AlignCenter` 表示文本应该水平居中和竖直居中对齐。painter.drawText(QRect(-100, -100, 200, 200), Qt::AlignCenter, QString::number(curValue));// painter的x轴回到刻度起始位置painter.rotate(135 + curValue * angle);// `width()` 和 `height()` 函数返回的分别是 `QWidget` 控件的宽度和高度。painter.drawLine(100, 0, qMin(width(), height()) / 2 - 20 - 50, 0);// 绘制扇形渐变色painter.rotate(-135 - curValue * angle);painter.setBrush(QColor(255, 0, 0, 100));painter.setPen(Qt::NoPen);painter.drawPie(QRect(-qMin(width(), height()) / 2 + 20 + 50,-qMin(width(), height()) / 2 + 20 + 50,qMin(width(), height()) - 40 - 100,qMin(width(), height()) - 40 - 100),(360 - 135) * 16,-curValue * angle * 16);
}

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805115.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

金蝶字段添加过滤条件

金蝶字段加过滤条件 F_PLDE_Date<GetValue(FDate) and F_PLDE_Date1>GetValue(FDate)

vue video 多个视频切换后视频不显示的解决方法

先说一下我这边的需求是视频需要轮播&#xff0c;一个人员有多个视频&#xff0c;左右轮播是轮播某个人员下的视频&#xff0c;上下切换是切换人员。 vue 代码 <el-carouselindicator-position"none"ref"carousel"arrow"always":interval&qu…

Java设计模式 | 简介

设计模式的重要性&#xff1a; 软件工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。 这个术语由埃里希 伽玛&#xff08;Erich Gamma&#xff09;等人在1…

六、Vuex

六、Vuex 6.1 Vuex是什么 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应 用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方 式&#xff0c;且…

猜字谜|构建生成式 AI 应用实践(一)

在 2023 亚马逊云科技 re:Invent 之后&#xff0c;细心的开发者们也许已经发现有一个很有趣的动手实验&#xff1a;开发一款可部署的基于大语言模型的字谜游戏&#xff1a; 该款游戏使用了文生图模型为玩家提供一个未知的提示词&#xff0c;玩家需要根据模型生成的图像来猜测该…

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频,前端代码生成物大翻新

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频&#xff0c;前端代码生成物大翻新 Rust通用代码生成器发布了红莲尝鲜版二十一的最新介绍视频&#xff0c;前端代码生成物大翻新。视频请见&#xff1a; Rust通用代码生成器&#xff1a;莲花&#xff0c;红莲尝鲜版二…

ShardingSphere 5.x 系列【15】分布式主键生成器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 配置3. 内置算法3.1 UUID3.2 Snowflake3.3 NanoId3.4 CosId3.5 Co…

【软考高项】【计算专题】- 3 - 进度类 - 双代号网络图

目录 一、知识点 1、画图 基本概念 作图流程 2 关键术语 &#xff08;1&#xff09;箭线 ​编辑&#xff08;2&#xff09;虚箭线 &#xff08;3&#xff09;节点 &#xff08;4&#xff09;起始节点 &#xff08;5&#xff09;终点节点 &#xff08;6&#xff09;中…

nginx-------- 高性能的 Web服务端 (三) 验证模块 页面配置

一、http设置 1.1 验证模块 需要输入用户名和密码 htpasswd 此命令来自于 httpd-tools 包&#xff0c;如果没有安装 安装一下即可 也可以安装httpd 直接yum install httpd -y 也一样 第一次生成文件htpasswd -c 文件路径 姓名 交互式生成密码 htpasswd -bc 文…

解决Maven爆红以及解决 Idea 卡在 Resolving问题

关于 Idea 卡在 Resolving&#xff08;前提是Maven的setting.xml中配置好了阿里云和仓库&#xff09; 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…

无人机的视频图传技术

在操控无人机时&#xff0c;视频图传技术显得尤为关键。通过这项技术&#xff0c;无人机的摄像头所捕捉的画面能实时回传至遥控器&#xff0c;使操作者全面掌握无人机的拍摄情况。同时&#xff0c;无人机图传技术也是衡量无人机性能的重要标准&#xff0c;它关乎飞行距离与时间…

TensorFlow2.x 精选笔记(1)数据基本操作与线性代数

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning 一、数组与张量 虽然张量看起来是复杂的对象&#xff0c;但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。 向量是元素的一维列表&#xff0c;向量是一…

MATLAB环境下基于NLEO的算法的脑电EEG信号自发活动瞬态检测

自发脑电信号是一种非平稳性很强的随机信号。在传统的脑电信号处理中&#xff0c;较公认的处理方法大多是建立在假设脑电图是准平稳信号的基础上&#xff0c;即认为它可以分成若干段&#xff0c;每一段的过程基本平稳&#xff0c;但段上叠加着瞬态。瞬态信号是有别于背景节率&a…

PNPM 批量检查和更新项目依赖

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

C++奇怪的 ::template

答疑解惑 怎么会有::template的写法 起初 在阅读stl的源码的时候&#xff0c;发现了一条诡异的代码 // ALIAS TEMPLATE _Rebind_alloc_t template<class _Alloc,class _Value_type> using _Rebind_alloc_t typename allocator_traits<_Alloc>::template rebind…

重大更新:GPT-4 API 现全面向公众开放!

重大更新&#xff1a;GPT-4 API 现全面向公众开放&#xff01; 在 AIGC&#xff08;人工智能生成内容&#xff09;领域内&#xff0c;我们一直致力于跟踪和分析如 OpenAI、百度文心一言等大型语言模型&#xff08;LLM&#xff09;的进展及其在实际应用中的落地情况。我们还专注…

单片机02_寄存器_GPIO设置__点灯

芯片概述 C51&#xff1a;0口、1口、2口、3口&#xff0c;P00~p07、P10~P17、P20~P27、P30~P37 STM32&#xff1a;A口、B口、C口、D口&#xff0c;PA0~PA15/PA5 GPIOA.5 STM32F407ZGT6有7组GPIO端口&#xff0c;分别是&#xff1a;A B C D E F G&#xff0c;每组均有16个GPIO端…

robots.txt 文件规则

robots.txt 是一种用于网站根目录的文本文件&#xff0c;其主要目的在于指示网络爬虫&#xff08;web crawlers&#xff09;和其他网页机器人&#xff08;bots&#xff09;哪些页面可以抓取&#xff0c;以及哪些页面不应该被抓取。可以看作是网站和搜索引擎机器人之间的一个协议…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root 和一个正整…

红队评估四靶场

文章目录 环境搭建1.设置所需网卡2.更改win7设置3.DC设置4.web设置开启docker服务5.kali网段`渗透启动`1.确认对方靶机的IP地址2.端口探测3.web探测`2001端口``2002端口`Tomcat/8.5.19漏洞复现`2003端口`4.docker逃逸5.ssh密钥爆破`域渗透启动`1.提权2.隧道搭建各项配置文件内容…