使用QT绘制雷达扫描效果

这篇具有很好参考价值的文章主要介绍了使用QT绘制雷达扫描效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

话不多说直接上代码,代码规范性可能差了点,但是效果得以实现,在这里记录一下。
源码工程在这里下载地址
scan.h的代码如下

#ifndef SCAN_H
#define SCAN_H

#include <QWidget>
#include <QPainter>
#include <QTime>
#include <QTimer>
#include <QDebug>
#include <QPoint>
#include <QtMath>

namespace Ui {
class Scan;
}
class Scan : public QWidget
{
    Q_OBJECT
public:
    explicit Scan(QWidget *parent = nullptr);
    ~Scan();
public slots:
   void timerTimeOut();
protected:
   void paintEvent(QPaintEvent *event) override;
private slots:
   void on_pushButton_clicked();
private:
    Ui::Scan *ui;
};
#endif // SCAN_H

scan.cpp的代码如下

#include "scan.h"
#include "ui_scan.h"
QTimer *timer = new QTimer();
int m_angle=0;
int alpha=0;
double cir_size=5;
Scan::Scan(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Scan)
{
    ui->setupUi(this);
    setPalette(Qt::black); setAutoFillBackground(true);//强制设置背景颜色为黑色
    connect(timer,SIGNAL(timeout()),this,SLOT(timerTimeOut()));//用槽函数控制雷达扫描效果。
    timer->start(10);


}

Scan::~Scan()
{
    delete ui;
}

void Scan::timerTimeOut()
{
    timer->start(10);
    if(m_angle<-360){
        m_angle=0;
    }//实现无缝连接,且保证m_angle的值不会溢出
    if(alpha>=255){
        alpha = 0;
    }
    if(cir_size>10){
        cir_size=5;
    }
    update();
}
void Scan::paintEvent(QPaintEvent *event)//此函数自动执行,实现扫描动画效果
{
    Q_UNUSED(event);
    QPainter painter(this);
    QPen pen;
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(QPen(qRgba(128, 255, 0,250)));

    //网格改成坐标系
    int x=280;//原本为240,右移40,下移60
    int y=300;
    /** 直径按照480处理 每隔40px画一个圆 绘制雷达图**/
    QPoint center(x,y);
    painter.drawEllipse(center,240,240);
    painter.drawEllipse(center,240-48,240-48);
    painter.drawEllipse(center,240-96,240-96);
    painter.drawEllipse(center,240-144,240-144);
    painter.drawEllipse(center,240-192,240-192);
    /** 画外圈刻度值,将坐标系移动到圆心 **/
    painter.translate(x,y);
    painter.setPen(QPen(qRgba(255, 255, 0,250)));
    painter.setFont(QFont("Calibri",10));
    for(int i=1;i<=360;i++){
           painter.rotate(1);
           painter.drawLine(0,-240,0,-235);
    }
    for(int i=1;i<=72;i++){
        painter.rotate(5);
        painter.drawLine(0,-240,0,-232);
    }
    for(int i=1;i<=36;i++){
        painter.setRenderHint(QPainter::Antialiasing);
        painter.rotate(10);
        painter.drawLine(0,-240,0,-228);
    }
    for(int i=1;i<=4;i++){
        painter.rotate(90);
        painter.drawLine(0,-240,0,-168);
    }
    painter.translate(-x,-y);//恢复坐标系
   /** 绘制扫描效果 **/
    QConicalGradient gradient(x, y, m_angle + 360);
    gradient.setColorAt(0.1, QColor(128, 255, 0, 150));
    gradient.setColorAt(0.7, QColor(0, 255, 0, 0));//尾部
    painter.setBrush(gradient);
    painter.setPen(QPen(Qt::NoPen));//去掉外框线
    if (width() > height()){
        painter.drawPie(40, 60, 480, 480, m_angle * 16, 360 * 16);
    }
    else{ painter.drawPie(40, 60, 480, 480, m_angle * 16, 360 * 16);}
    
    m_angle -= 1;//每次旋转1度
    alpha +=2;
    cir_size+=0.01;

    //模拟画出可疑点
    painter.setBrush(QBrush(QColor(50, 255, 200,alpha)));
    painter.drawEllipse(0,0,15,15);
    painter.drawEllipse(60+120,60+161,cir_size,cir_size);
    painter.drawEllipse(60+240,60+161,cir_size,cir_size);
    painter.drawEllipse(60+300,60+300,cir_size,cir_size);
    painter.setBrush(QBrush(QColor(50, 255, 200,(alpha+50)%255)));
    painter.drawEllipse(60+160,60+121,cir_size,cir_size);
    painter.drawEllipse(60+60,60+191,cir_size,cir_size);
    painter.drawEllipse(60+260,60+221,cir_size,cir_size);
    painter.setBrush(QBrush(QColor(50, 255, 200,(alpha+100)%255)));
    painter.drawEllipse(60+210,60+181,cir_size,cir_size);
    painter.drawEllipse(60+10,60+281,cir_size,cir_size);
    painter.drawEllipse(60+100,60+81,cir_size,cir_size);
 

}




void Scan::on_pushButton_clicked()
{
    m_angle=0;//将扫描动画重置并刷新数据,后面要将数据刷新的函数写在下面。
}

效果图,雷达右上角的图标对应着on_pushButton的点击事件使用QT绘制雷达扫描效果文章来源地址https://www.toymoban.com/news/detail-503524.html

到了这里,关于使用QT绘制雷达扫描效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT中窗口自绘制效果展示

    项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 myspeed.pro drawdialog.h meter1.h meter2.h drawdialog.cpp meter1.cpp meter2.cpp main.cpp

    2024年02月07日
    浏览(44)
  • MATLAB | 如何使用MATLAB绘制雷达图(蜘蛛图)

    数据为数值矩阵即可: 有 Patch 和 Line 两种样式,通过设置 Type 属性设置样式: 范围改为[2,10],并绘制2,8,9,10四条刻度线: 使用: setThetaTick setRTick 设置轴属性,举个例子,theta轴变为淡红色,R轴变为淡蓝色: 使用: setPropLabel setRLabel 修改属性标签和R刻度标签: 使用 setBkg 函数修饰

    2024年02月12日
    浏览(39)
  • CSS3如何实现雷达扫描图(动态样式)

    动态样式控制雷达扫描和暂停: 创建一个 雷达动画效果 ,具体解释如下: 1.首先定义了一个名为.radar的类,设置了其背景为径向渐变,包括四个部分:中心渐变、重复径向渐变、线性渐变和另一个线性渐变。同时设置了宽度、高度、最大宽度、最大高度、位置(相对定位)

    2024年04月09日
    浏览(42)
  • 实用CSS3模拟实现一个雷达扫描动画特效

    方法二:雷达扫描动画特效(filter阴影效果)  

    2024年02月12日
    浏览(55)
  • Unity实现杀戮尖塔出牌效果( 三. 贝塞尔曲线引导箭头绘制,卡牌使用效果制作)

    1. 攻击类型卡牌 ①拖拽超过一定高度之后卡牌会移动到手牌中心位置 ②出现攻击引导箭头 (塞贝尔曲线) ③成功指向目标怪物后打出 2. 技能能力类型卡牌 ①可自由拖动 ②脱离手牌高度后打出 这里只展示此效果核心代码内容,重复代码不做赘述,上期(二.鼠标指向卡牌时,

    2024年04月12日
    浏览(64)
  • 如何使用IDEA创建Servlet程序(不多说一句废话版~)

    说一下现在创建Servlet或Web项目和之前(Eclipse)的主要区别,之前是直接创建,现在是先要创建Java项目,再通过添加支持框架变成Servlet或Web项目。 废话不多说,回归主题,开干: 在创建的空项目的基础上,File-New-Module… Java-Module SDK-Next。 起个模块名-Finish。 鼠标在项目名上

    2023年04月08日
    浏览(78)
  • 使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C++原型如下: 函数polylines()的Python原型如下: 函数polylines()的参数意义如下: img—绘制的多条相连线段或多边形所在

    2024年02月04日
    浏览(70)
  • CSS 雷达监测效果

    2024年02月01日
    浏览(42)
  • QT使用QML实现地图绘制虚线

    QML提供了MapPolyline用于在地图上绘制线段,该线段是实线,因此我使用Canvas自定义绘制的方式在地图上绘制线段,如图: 鼠标在地图上点击后,在点击位置添加图标 ,当有多个图标被添加到地图上后,计算各个图标间的距离,并创建一个新的虚线线段组件,连接两个图标点,

    2024年02月13日
    浏览(48)
  • Python绘制雷达图展示学生各科考试成绩

    参考代码: 运行效果: 温馨提示 进入公众号,通过菜单“最新资源”==“历史文章”可以快速查看分专题的文章列表,通过“最新资源”==“微课专区”可以观看Python微课,通过“最新资源”==“培训动态”可以查看近期Python培训安排,通过“最新资源”==“教学资源”可以

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包