#include #include #include #include #include #include &l_qt雷达图">搜索查看编辑修改首页UNITYNODEJSPYTHONAIGITPHPGOCEF3JAVAHTMLCSS搜索小丑西瓜9 这个屌丝很懒,什么也没留下! 关注作者热门标签jqueryHTMLCSSPHPASPPYTHONGOAICC++C#PHOTOSHOPUNITYiOSandroidvuexml爬虫SEOLINUXWINDOWSJAVAMFCCEF3CADNODEJSGITPyppeteerarticle热门文章1旋转矩阵R、平移向量t以及变换矩阵T的定义及其下标的含义2Java多线程之线程安全问题_java 线程安全3YOLO | YOLO-World论文详解_yolo world4el-select(全部)小技巧_el-select方法5微信小程序web-view与H5 通信方式探索_wx.miniprogram.switchtab6STM32 HAL库ADC+DMA配置_adc injected conversionmode7Python列表中的extend功能及用法举例8leetcode13题罗马数字转成整数9外星人入侵(使用python编写)_外星人入侵python10Intellij IDEA清空Commit的Unversioned Files,可忽略不想提交的文件以及文件夹等设置_unversioned files怎么处理当前位置: article > 正文 QT 绘制雷达图_qt雷达图 作者:小丑西瓜9 | 2024-03-01 03:21:33 赞踩qt雷达图 RadarWidget.h #pragma once #include <QWidget>#include "ui_RadarWidget.h"#include <QPainter>#include <QPaintEvent>#include <QTimerEvent>#include <QRect>#include <QMouseEvent>#include <iostream>#include <QKeyEvent>#include <math.h>class RadarWidget : public QWidget{ Q_OBJECT public: RadarWidget(QWidget *parent = Q_NULLPTR); virtual void paintEvent(QPaintEvent* event); virtual void timerEvent(QTimerEvent* event); virtual void wheelEvent(QWheelEvent* event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void keyPressEvent(QKeyEvent* event); virtual void resizeEvent(QResizeEvent* event); //获取角度对应的圆弧点 QPointF trans(int angle); //获取中心点 QPointF GetCentrePT(); //获取矩形 QRect GetCenterRect(QPointF point); QPointF CustomRotate(QPointF point, qreal from_angle, qreal rotate);private: //缩放系数 float m_zoom; //widget的尺寸 QRect _rect; //记录绘图中心点 QPoint m_point; //扇区渐变角度 int m_Angle; //扇区每次移动角度 int Speed; int m_nRadius; int m_iRet; Ui::RadarWidgetClass ui;}; RadarWidget.cpp #include "RadarWidget.h"#define PI 3.1415926 RadarWidget::RadarWidget(QWidget *parent) : QWidget(parent){ ui.setupUi(this); m_zoom = 1.0; Speed = 1; _rect = this->rect(); m_point.setX(_rect.width() / 2); m_point.setY(_rect.height() / 2); m_Angle = 0; //开启鼠标追踪 setMouseTracking(true); this->startTimer(100);} void RadarWidget::paintEvent(QPaintEvent* event){ QPainter painter(this); painter.setPen(QColor(Qt::white)); //开启反锯齿 painter.setRenderHint(QPainter::Antialiasing, true); //将中心位置设置为坐标原点 painter.translate(m_point.x(),m_point.y()); //最小半径 int iRet = _rect.height()/2/3*m_zoom; m_iRet = iRet; //画刻度 QPoint line1; QPoint line2; line1.setX(0); line1.setY(0); line2.setX(0); line2.setY(-iRet * 3); //画线 QLineF n_line(line1, line2); for (int i = 0; i < 12; i++) { n_line.setAngle(i * 30.0); painter.drawLine(n_line); } //画角度 for (int i = 0; i < 12; i++) { int drawangel = i * 30; //角度转弧度 QPointF pt = trans(drawangel); // painter.drawLine(GetCentrePT(), pt); QString strText = QString::number(drawangel); //设置当前字体 painter.save(); //【1】偏移坐标原点到需要绘制刻度的位置 painter.translate(pt); //【2】旋转指定的角度 painter.rotate(drawangel); //【3】 画刻度 painter.drawText(GetCentrePT().x(), GetCentrePT().y(),strText); painter.restore(); } //画刻度 360° for (int i = 0; i < 360; i++) { QPointF optintold; optintold.setX(cos(PI * 2 / 360 * i) * m_iRet * 3); optintold.setY(sin(PI * 2 / 360 * i) * m_iRet * 3); QPointF optintnew; int nes = m_iRet * 3 -10; optintnew.setX(cos(PI * 2 / 360 * i) * nes); optintnew.setY(sin(PI * 2 / 360 * i) * nes); painter.drawLine(optintnew, optintold); } //画同心圆 及 量程 for (int i = 0; i < 4; i++) { QPoint point; point.setX(0); point.setY(0); painter.drawEllipse(point, iRet*i, iRet * i); painter.drawText(GetCentrePT().x(), GetCentrePT().y()-iRet * i, QString::number(i*50)); } //圆锥渐变// QConicalGradient ConicaGrad(0,0,0);// QColor i_color = QColor(14,255,11);// i_color.setAlpha(100);// ConicaGrad.setColorAt(0, i_color);// i_color.setAlpha(50);// ConicaGrad.setColorAt(0.1, i_color);// i_color.setAlpha(0);// ConicaGrad.setColorAt(1, i_color);// painter.setBrush(QBrush(ConicaGrad)); QRect ReFar(-_rect.height() / 2 * m_zoom, -_rect.height() / 2 * m_zoom, _rect.height() * m_zoom, _rect.height() * m_zoom); painter.setBrush(QColor(84, 135, 29,90)); painter.drawPie(ReFar,m_Angle * 16, 70*16); } void RadarWidget::timerEvent(QTimerEvent* event){ m_Angle += Speed; if (m_Angle > 360) m_Angle = 0; update();} void RadarWidget::wheelEvent(QWheelEvent* event){ if (event->delta() > 0) { m_zoom += 0.1; } else { m_zoom -= 0.1; } update(); } void RadarWidget::mouseMoveEvent(QMouseEvent* event){ //判断是否为左键按下 if (Qt::LeftButton & event->buttons()) { m_point.setX(event->pos().x()); m_point.setY(event->pos().y()); } } void RadarWidget::keyPressEvent(QKeyEvent* event){ //TODO:控制雷达旋转速度 <- 速度+ -> 速度- if (Qt::Key_Left == event->key()) { if (Speed >= 10) Speed = 10; Speed++; } else if (Qt::Key_Right == event->key()) { if (Speed < 1) Speed = 1; Speed--; } } void RadarWidget::resizeEvent(QResizeEvent* event){ m_point.setX(event->size().width() / 2); m_point.setY(event->size().height() / 2); m_nRadius = (event->size().height() - 50) / 2;} QPointF RadarWidget::trans(int angle){ QPointF ptResult(GetCentrePT()); //[角度转弧度] //float rad = qDegreesToRadians(static_cast<float>(angle)); float rad = (float)angle / 180 * PI; ptResult.setX(GetCentrePT().x() + m_iRet * 3 *sin(static_cast<qreal>(rad))); ptResult.setY(GetCentrePT().y() - m_iRet * 3 *cos(static_cast<qreal>(rad))); return ptResult; } QPointF RadarWidget::GetCentrePT(){ QPointF pointf; pointf.setX(0); pointf.setY(0); return pointf;} QRect RadarWidget::GetCenterRect(QPointF point){ QRect rect; rect.setX(point.x()); rect.setY(point.y()); rect.setWidth(50); rect.setHeight(50); return rect; } QPointF RadarWidget::CustomRotate(QPointF point, qreal from_angle, qreal rotate){ QPointF Tmp; qreal arc = (rotate - from_angle) / 180 * PI; qreal Length = sqrt(point.x() * point.x() + point.y() * point.y()); Tmp.setX(Length * cos(arc)); Tmp.setY(Length * sin(arc)); return Tmp.toPoint();} 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/170619推荐阅读article使用Python实现学生信息管理系统_python学生管理系统...个人练习作品_python学生管理系统python学生管理系统 ... 赞踩articleCentos7 怎么关闭防火墙_centos7 关闭iptables...CentOS7中若使用CentOS6的关闭防火墙命令会报错CentOS7关闭防火墙的步骤如下如果安装了iptables-... 赞踩articlek8s-cka考试题库_k8s证书认证考试...本次测试的所有问题都必须在指定的cluster配置环境中完成。为尽量减少切换,系统已对问题进行分组,同一cluster内... 赞踩articleflutter 一键打出不同包名、应用名、版本名、签名、应用图标、版本号的安装包...另外,记得在 AndroidManifest.xml 中配置相关信息。flutter 一键打出不同包名、应用名、版本名、... 赞踩articleGo 开发实践:手把手教你搭建一个登录功能_go登录接口...如果你最近刚学习Go 语言基础特性,对 Go 语言也有了一定掌握和理解。那么接下来小慕就带你学习如何使用 Go 语言如何... 赞踩article如何在Python中使用JSON数据...英文 |https://www.ordinarycoders.com/blog/article/work-with-JS... 赞踩article在重置电脑选项中,选择云下载失败,提示无法下载,请尝试从本地重置_无法下载请尝试使用本地重新安装选项...若是依然有异常,建议更换一个网络环境,例如使用有线链接。也可以尝试链接手机数据流量的热点。_无法下载请尝试使用本地重新安... 赞踩articleNodejs之http模块详解_nodejs http...一、Web服务器什么是Web服务器?当应用程序(客户端)需要某一个资源时,可以向一个台服务器,通过Http请求获取到这个... 赞踩article生成8位字母+数字无重复的随机数_生成随机不重复的8位字母与数字结合数.../** * 生成8位随机密码 * * @return */ public String genRandomPw... 赞踩article移动应用程序开发的未来:Flutter_flutter框架为什么凉了...作者:Eric Grandt随着系统以及应用复杂性的日益增高,「write once,run anywhere」开始成为... 赞踩articlevba中字典循环时的报错_vba 数组字典被锁...'本错误/问题与字典相关, 因为如果是一般的for i=1 to X 这种循环未出现问题.'同一个存在于某固定行数的Fo... 赞踩articlejava导出excel 【POI 3.17】POI 版本不匹配解决方法_cannot resolve...目录1.Maven依赖2.ExcelUtil工具类代码3.Test测试4.遇到的问题公司要写导出Excel的功能,就写了... 赞踩articleListView条目点击时和点击后图片颜色、文字颜色、条目背景更改大全_修改qlistview::i...当ListView条目点击时,往往需要改变条目里面控件的颜色,如改变文字颜色、条目的背景颜色或是图片颜色。而这些颜色的改... 赞踩articleRedis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装red...存储方式关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响非关系型数据库,他们的操作更多的是依赖于内存来... 赞踩article一个鼠标控制两台电脑...一个鼠标控制两台电脑_一个鼠标控制两台电脑一个鼠标控制两台电脑 &nbs... 赞踩articleKubernetes K8S之存储PV-PVC详解_volumeclaimtemplates 容量...K8S之存储PV-PVC概述与说明,并详解常用PV-PVC示例_volumeclaimtemplates 容量volum... 赞踩articlePython-字符串str和json格式的转换_python str转json...str转jsonstr转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边... 赞踩articleQML之Text_qml 监听text的高度变化...QML提供的text显示文本,只读显示不能读写。和我们一般的文档软件的显示大同小异,只不过文档提供了直接设置,这里我们需... 赞踩article基于SSM框架的学生成绩管理系统_基于ssm学生成绩管理系统...项目描述 学生成绩管理系统分为三种用例角色,管理员,教师,学生。 管理员功能包括,学生信息管理,教师信息管理,课程信息管... 赞踩articlevue中实现打印_vue 打印...vue中实现打印_vue 打印vue 打印 一、VUE 集成 LODOP插件打印 VUE 集成L... 赞踩相关标签python开发语言数据分析笔记数据结构centos运维服务器linuxjavanginxkubernetesfluttergohtmljson编程语言javascript网络windowshttpnodenodejs随机数生成随机数
赞
踩
RadarWidget.h
#pragma once #include <QWidget>#include "ui_RadarWidget.h"#include <QPainter>#include <QPaintEvent>#include <QTimerEvent>#include <QRect>#include <QMouseEvent>#include <iostream>#include <QKeyEvent>#include <math.h>class RadarWidget : public QWidget{ Q_OBJECT public: RadarWidget(QWidget *parent = Q_NULLPTR); virtual void paintEvent(QPaintEvent* event); virtual void timerEvent(QTimerEvent* event); virtual void wheelEvent(QWheelEvent* event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void keyPressEvent(QKeyEvent* event); virtual void resizeEvent(QResizeEvent* event); //获取角度对应的圆弧点 QPointF trans(int angle); //获取中心点 QPointF GetCentrePT(); //获取矩形 QRect GetCenterRect(QPointF point); QPointF CustomRotate(QPointF point, qreal from_angle, qreal rotate);private: //缩放系数 float m_zoom; //widget的尺寸 QRect _rect; //记录绘图中心点 QPoint m_point; //扇区渐变角度 int m_Angle; //扇区每次移动角度 int Speed; int m_nRadius; int m_iRet; Ui::RadarWidgetClass ui;};
RadarWidget.cpp
#include "RadarWidget.h"#define PI 3.1415926 RadarWidget::RadarWidget(QWidget *parent) : QWidget(parent){ ui.setupUi(this); m_zoom = 1.0; Speed = 1; _rect = this->rect(); m_point.setX(_rect.width() / 2); m_point.setY(_rect.height() / 2); m_Angle = 0; //开启鼠标追踪 setMouseTracking(true); this->startTimer(100);} void RadarWidget::paintEvent(QPaintEvent* event){ QPainter painter(this); painter.setPen(QColor(Qt::white)); //开启反锯齿 painter.setRenderHint(QPainter::Antialiasing, true); //将中心位置设置为坐标原点 painter.translate(m_point.x(),m_point.y()); //最小半径 int iRet = _rect.height()/2/3*m_zoom; m_iRet = iRet; //画刻度 QPoint line1; QPoint line2; line1.setX(0); line1.setY(0); line2.setX(0); line2.setY(-iRet * 3); //画线 QLineF n_line(line1, line2); for (int i = 0; i < 12; i++) { n_line.setAngle(i * 30.0); painter.drawLine(n_line); } //画角度 for (int i = 0; i < 12; i++) { int drawangel = i * 30; //角度转弧度 QPointF pt = trans(drawangel); // painter.drawLine(GetCentrePT(), pt); QString strText = QString::number(drawangel); //设置当前字体 painter.save(); //【1】偏移坐标原点到需要绘制刻度的位置 painter.translate(pt); //【2】旋转指定的角度 painter.rotate(drawangel); //【3】 画刻度 painter.drawText(GetCentrePT().x(), GetCentrePT().y(),strText); painter.restore(); } //画刻度 360° for (int i = 0; i < 360; i++) { QPointF optintold; optintold.setX(cos(PI * 2 / 360 * i) * m_iRet * 3); optintold.setY(sin(PI * 2 / 360 * i) * m_iRet * 3); QPointF optintnew; int nes = m_iRet * 3 -10; optintnew.setX(cos(PI * 2 / 360 * i) * nes); optintnew.setY(sin(PI * 2 / 360 * i) * nes); painter.drawLine(optintnew, optintold); } //画同心圆 及 量程 for (int i = 0; i < 4; i++) { QPoint point; point.setX(0); point.setY(0); painter.drawEllipse(point, iRet*i, iRet * i); painter.drawText(GetCentrePT().x(), GetCentrePT().y()-iRet * i, QString::number(i*50)); } //圆锥渐变// QConicalGradient ConicaGrad(0,0,0);// QColor i_color = QColor(14,255,11);// i_color.setAlpha(100);// ConicaGrad.setColorAt(0, i_color);// i_color.setAlpha(50);// ConicaGrad.setColorAt(0.1, i_color);// i_color.setAlpha(0);// ConicaGrad.setColorAt(1, i_color);// painter.setBrush(QBrush(ConicaGrad)); QRect ReFar(-_rect.height() / 2 * m_zoom, -_rect.height() / 2 * m_zoom, _rect.height() * m_zoom, _rect.height() * m_zoom); painter.setBrush(QColor(84, 135, 29,90)); painter.drawPie(ReFar,m_Angle * 16, 70*16); } void RadarWidget::timerEvent(QTimerEvent* event){ m_Angle += Speed; if (m_Angle > 360) m_Angle = 0; update();} void RadarWidget::wheelEvent(QWheelEvent* event){ if (event->delta() > 0) { m_zoom += 0.1; } else { m_zoom -= 0.1; } update(); } void RadarWidget::mouseMoveEvent(QMouseEvent* event){ //判断是否为左键按下 if (Qt::LeftButton & event->buttons()) { m_point.setX(event->pos().x()); m_point.setY(event->pos().y()); } } void RadarWidget::keyPressEvent(QKeyEvent* event){ //TODO:控制雷达旋转速度 <- 速度+ -> 速度- if (Qt::Key_Left == event->key()) { if (Speed >= 10) Speed = 10; Speed++; } else if (Qt::Key_Right == event->key()) { if (Speed < 1) Speed = 1; Speed--; } } void RadarWidget::resizeEvent(QResizeEvent* event){ m_point.setX(event->size().width() / 2); m_point.setY(event->size().height() / 2); m_nRadius = (event->size().height() - 50) / 2;} QPointF RadarWidget::trans(int angle){ QPointF ptResult(GetCentrePT()); //[角度转弧度] //float rad = qDegreesToRadians(static_cast<float>(angle)); float rad = (float)angle / 180 * PI; ptResult.setX(GetCentrePT().x() + m_iRet * 3 *sin(static_cast<qreal>(rad))); ptResult.setY(GetCentrePT().y() - m_iRet * 3 *cos(static_cast<qreal>(rad))); return ptResult; } QPointF RadarWidget::GetCentrePT(){ QPointF pointf; pointf.setX(0); pointf.setY(0); return pointf;} QRect RadarWidget::GetCenterRect(QPointF point){ QRect rect; rect.setX(point.x()); rect.setY(point.y()); rect.setWidth(50); rect.setHeight(50); return rect; } QPointF RadarWidget::CustomRotate(QPointF point, qreal from_angle, qreal rotate){ QPointF Tmp; qreal arc = (rotate - from_angle) / 180 * PI; qreal Length = sqrt(point.x() * point.x() + point.y() * point.y()); Tmp.setX(Length * cos(arc)); Tmp.setY(Length * sin(arc)); return Tmp.toPoint();}