Qt中使用QtDataVisualization实时绘制雷达点云三维散点图
一、Qt DataVisualization组件安装
在Qt安装时勾选 Qt Data Visualization组件,该组件包含相关三维图形绘制组件,利用其开发三维绘图功能需要勾选。
二、准备
1、在项目的.pro文件中加上 QT += datavisualization
QT += datavisualization
2、引用头文件及名字空间
#include <QtDataVisualization>
#include <QAbstract3DInputHandler>using namespace QtDataVisualization;
三、ui设计
两个按钮用于启动雷达UDP线程,接收雷达数据,一个widget用于放置三维散点图表。
四、头文件代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QVector3D>
#include <QDebug>
#include <QPointF>
#include <QtDataVisualization>
#include <QAbstract3DInputHandler>
#include <QSplitter>
#include "udpthread.h"
#define PI 3.1415
typedef QVector<QVector3D> MY_BUF3D ;using namespace QtDataVisualization;QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_start_clicked();void on_pushButton_stop_clicked();void drawPoint(MY_BUF3D);private:Ui::MainWindow *ui;void initMap();udpThread UDPthread;Q3DScatter *m_3Dgraph;QScatter3DSeries *m_3Dseries;//散点类型};
#endif // MAINWINDOW_H
五、源文件代码
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);qRegisterMetaType<MY_BUF3D>("MY_BUF3D");this->setWindowTitle("UDP_Reciver");initMap();QSplitter *splitter = new QSplitter(Qt::Horizontal);splitter->addWidget(ui->widget_pushButton);splitter->addWidget(ui->widget);this->setCentralWidget(splitter);connect(&UDPthread,SIGNAL(pointdata(MY_BUF3D)),this,SLOT(drawPoint(MY_BUF3D)));}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initMap()
{m_3Dgraph = new Q3DScatter();ui->widget = QWidget::createWindowContainer(m_3Dgraph);QScatterDataProxy *proxy = new QScatterDataProxy(); //数据代理m_3Dseries = new QScatter3DSeries(proxy);//创建序列m_3Dseries->setMeshSmooth(true);m_3Dgraph->addSeries(m_3Dseries);//创建坐标轴m_3Dgraph->axisX()->setTitle("axis X");m_3Dgraph->axisX()->setTitleVisible(true);m_3Dgraph->axisX()->setRange(-35,60);m_3Dgraph->axisY()->setTitle("axis Y");m_3Dgraph->axisY()->setTitleVisible(true);m_3Dgraph->axisY()->setRange(-3,4);m_3Dgraph->axisZ()->setTitle("axis Z");m_3Dgraph->axisZ()->setTitleVisible(true);m_3Dgraph->axisZ()->setRange(0,35);m_3Dgraph->activeTheme()->setLabelBackgroundEnabled(false);m_3Dgraph->activeTheme()->setBackgroundColor(QColor(90,90,90));//设置背景色m_3Dseries->setMesh(QAbstract3DSeries::MeshSphere);//数据点为圆球m_3Dseries->setSingleHighlightColor(QColor(0,0,255));//设置点选中时的高亮颜色m_3Dseries->setBaseColor(QColor(0,255,255));//设置点的颜色m_3Dseries->setItemSize(0.05);//设置点的大小
}void MainWindow::on_pushButton_start_clicked()
{if(!UDPthread.isRunning()){UDPthread.start();}ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true);
}void MainWindow::on_pushButton_stop_clicked()
{if(UDPthread.isRunning()){UDPthread.stop();}ui->pushButton_start->setEnabled(true);ui->pushButton_stop->setEnabled(false);
}void MainWindow::drawPoint(MY_BUF3D points)
{QScatterDataArray *dataArray = new QScatterDataArray();dataArray->resize(points.count());QScatterDataItem *ptrToDataArray = &dataArray->first();for (int i = 0;i < points.count();i++ ){ptrToDataArray->setPosition(points[i]);ptrToDataArray++;}m_3Dseries->dataProxy()->resetArray(dataArray);//更新散点}
六、效果展示
提示:三维坐标系可以通过按住鼠标右键拖动进行任意旋转哦!刚开始使用时用左键拖了半天没有反应,都准备自己写鼠标事件来实现这个功能了,还好后面机智,哈哈哈。。。
七、最后
后续将分享QT + VS2019 + PCL + VTK的环境搭建,利用QVTKWidget绘制PCL电压的相关内容。
新人上路,谢谢关注!
1.想了解二维散点图请参考本人前面文章:
Qt中使用QtCharts实时绘制雷达点云散点图
2.PCL绘制实时点云请参考后面文章:
QT+VS2019+PCL实时绘制激光雷达点云
Qt中使用QtDataVisualization实时绘制雷达点云三维散点图相关推荐
- Qt中的基础图形绘制
文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...
- ROS:bag数据包内容提取——雷达点云数据和imu数据
通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...
- 【点云前视图FV】详细理解雷达点云前视图(FV, Front View)
本节详细介绍雷达点云前视图(FV, Front View)的基本原理和计算过程,含原理介绍.代码.数据和可视化效果. 1 前视图基本原理 雷达在工作时通常是围绕一个轴进行旋转扫描.对于单线激光雷达来说 ...
- 毫米波雷达点云 DBSCAN聚类算法
毫米雷达点云 DBSCAN聚类算法 聚类的目的 聚类算法分类 原型聚类 层次聚类 密度聚类 DBSCAN聚类算法原理 相关定义 算法流程以及伪代码 DBSCAN算法优缺点 DBSCAN参数选择 聚类衡 ...
- 利用毫米波雷达点云进行多目标聚类跟踪的算法设计
利用毫米波雷达点云进行多目标聚类跟踪的算法设计 文章目录 利用毫米波雷达点云进行多目标聚类跟踪的算法设计 前言 1 简介 1.1 跟踪模块 1.2 雷达几何图 1.3 跟踪坐标系的选择 1.4 恒速度 ...
- nuScenes毫米波雷达点云投影至图像
效果图 nuscenes-devkit提供的点云可视化 first_sample_token = my_scene['first_sample_token'] my_sample = nusc.get ...
- Qt中的图像处理与绘制
文章目录 1 图像处理与绘制 1.1 QImage和QPixImage 1.2 简单图像处理 1.3 屏幕截图 1 图像处理与绘制 1.1 QImage和QPixImage 设备无关图像类-QImag ...
- 用RVIZ2显示毫米波雷达点云
ROS2用RVIZ2显示点云 RVIZ2支持的格式如下图 毫米波雷达和激光雷达的数据可以考虑用点云显示,也即PointCloud和PointCloud2,这里采用PointCloud. 首先查看Poi ...
- 解决在ROS系统下录制Ti毫米波雷达点云数据,并转换成pcd文件时间戳为零的问题
问题描述 本人使用的是TI公司的AWR1443BOOST,运行官方的ROS Point Cloud Visualizer示例,可以得到二维和三维的点云信息.利用rosbag record命令可以记录一 ...
- matlab Lidar Camara Calibrator使用方法及雷达点云对相机的标定
标定过程 标定数据导入matlab lidar camara calibrator 插件,点击图示中的Import后选择Import Data如图所示: 依次选择导入图像和点云数据如下后点击" ...
最新文章
- const reference const
- 递归三:变态蛙跳台阶
- struc,union,class的内存对齐方式
- 分享一篇关于“每日优鲜”的PRD文档
- 搭建Sql Server AlwaysOn 视频教程
- Android笔记 simpleAdapter demo
- 计算机主机硬件详细介绍,计算机系统的硬件和系统软件详细介绍
- php 去除零宽度空格,如何在PHP变量中去除空格?
- 一个很好用的,免费的UML在线画图网站
- Android常用库整理
- Win10虚拟机性能优化
- 一、Geos库的安装和计算多边形是否相交
- 论劳动生产力进步的原因,兼论劳动产品在不同阶级人民之间自然分配顺序(读后感)
- 【C语言】【结构体】复数类型加减乘除的实现
- 完美移除ESXI 7.0默认120G虚拟闪存,并支持自由调整,释放被占用的磁盘空间
- (二)改掉这些坏习惯,还怕写不出优雅的代码?
- Navicat Data Modeler(ndm2)数据模型逆向生成表
- Jetson AGX xavier测试六叶树Usb转Can卡通信记录笔记
- 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
- Android去除EditText的聚焦Focuse