当前位置: 首页 > news >正文

Qt自定义控件:雷达扫描

1、功能

制作一个雷达扫描仪

2、实现

重写窗口的绘画事件paintEvent,并使用画笔QPainter进行绘制,使用drawRect绘制黑色背景,使用drawEllipse雷达圈,使用drawLine绘制水平垂直线,使用drawPie绘制扇形扫描区,用定时器QTimer刷新界面以达到动态效果

3、效果

在这里插入图片描述

4、源码
a、头文件
#ifndef RADARSCANNER_H
#define RADARSCANNER_H#include <QTimer>
#include <QWidget>class RadarScanner : public QWidget {Q_OBJECTpublic:explicit RadarScanner(QWidget *parent = nullptr);protected:void paintEvent(QPaintEvent *event);private:QTimer *timer_ = nullptr;int start_angle_ = 0;
};#endif  // RADARSCANNER_H
b、源文件
#include "radarscanner.h"#include <QPainter>RadarScanner::RadarScanner(QWidget *parent) : QWidget(parent) {setWindowTitle(tr("Radar Scanner"));timer_ = new QTimer(this);connect(timer_, &QTimer::timeout, [=]() {update();start_angle_ = (start_angle_ + 30) % 360;});timer_->setInterval(100);  // 100ms刷新一次timer_->start();
}void RadarScanner::paintEvent(QPaintEvent *event) {Q_UNUSED(event);// 绘制背景色QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setBrush(Qt::black);painter.drawRect(rect());const int ring_num = 7;                          // 圆环的数量const int incr_Value = height() / 2 / ring_num;  // 最小圆半径(递增值)const int ext_rect_h =incr_Value * ring_num;  // 最大圆的半径(外接正方形的高的一半)// 绘制圆圈painter.setBrush(Qt::NoBrush);painter.translate(rect().center());  // 画笔窗口的中心QPen pen(Qt::green, 3);painter.setPen(pen);for (int i = 0; i <= ring_num; i++) {painter.drawEllipse(QPoint(0, 0), incr_Value * i, incr_Value * i);}// 水平垂直线painter.drawLine(-ext_rect_h, 0, ext_rect_h, 0);painter.drawLine(0, -ext_rect_h, 0, ext_rect_h);// 绘制扫描扇形painter.setPen(Qt::NoPen);QConicalGradient gradient(0, 0, -start_angle_);  // 角度渐变gradient.setColorAt(0, QColor(0, 255, 0, 200));gradient.setColorAt(0.1, QColor(0, 255, 0, 100));gradient.setColorAt(0.2, QColor(0, 255, 0, 0));gradient.setColorAt(1, QColor(0, 255, 0, 0));painter.setBrush(gradient);// 这里*16的原因,Qt绘制单位1/16°,70是扇形角度QRect pie_rect(-ext_rect_h, -ext_rect_h, ext_rect_h * 2, ext_rect_h * 2);painter.drawPie(pie_rect, -start_angle_ * 16, 70 * 16);
}

对你有用就点个赞👍,以后需要用到就收藏⭐


http://www.mrgr.cn/news/42839.html

相关文章:

  • 155. 最小栈
  • java相关新技术
  • isinstance()学习
  • 《计算机原理与系统结构》学习系列
  • idea创建springboot模块
  • 在 ArkTS 网络请求中,重新封装一下 http 模块
  • pWnOS2.0 靶机渗透( cms 渗透,php+mysql 网站渗透,密码碰撞)
  • 业务封装与映射 -- 映射方式
  • 排序算法之选择排序
  • 分布式学习02-CAP理论
  • Linux进程控制(2)(进程程序替换1)
  • 【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包
  • python学习记录6
  • 堆排序算法的原理与应用
  • 基于Keras的U-Net模型在图像分割与计数中的应用
  • 企业级数据备份一般都是怎么做的?来唠唠嗑
  • pytest(三)——参数化@pytest.mark.parametrize
  • node_exporter使用textfile collector收集业务数据
  • PostgreSQL 创建账号与数据库:从连接到权限配置的完整指南
  • 绝对值得收藏!分享7款ai写作论文免费一键生成网站