一、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实时绘制雷达点云三维散点图相关推荐

  1. Qt中的基础图形绘制

    文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...

  2. ROS:bag数据包内容提取——雷达点云数据和imu数据

    通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...

  3. 【点云前视图FV】详细理解雷达点云前视图(FV, Front View)

    本节详细介绍雷达点云前视图(FV, Front View)的基本原理和计算过程,含原理介绍.代码.数据和可视化效果. 1 前视图基本原理 雷达在工作时通常是围绕一个轴进行旋转扫描.对于单线激光雷达来说 ...

  4. 毫米波雷达点云 DBSCAN聚类算法

    毫米雷达点云 DBSCAN聚类算法 聚类的目的 聚类算法分类 原型聚类 层次聚类 密度聚类 DBSCAN聚类算法原理 相关定义 算法流程以及伪代码 DBSCAN算法优缺点 DBSCAN参数选择 聚类衡 ...

  5. 利用毫米波雷达点云进行多目标聚类跟踪的算法设计

    利用毫米波雷达点云进行多目标聚类跟踪的算法设计 文章目录 利用毫米波雷达点云进行多目标聚类跟踪的算法设计 前言 1 简介 1.1 跟踪模块 1.2 雷达几何图 1.3 跟踪坐标系的选择 1.4 恒速度 ...

  6. nuScenes毫米波雷达点云投影至图像

    效果图 nuscenes-devkit提供的点云可视化 first_sample_token = my_scene['first_sample_token'] my_sample = nusc.get ...

  7. Qt中的图像处理与绘制

    文章目录 1 图像处理与绘制 1.1 QImage和QPixImage 1.2 简单图像处理 1.3 屏幕截图 1 图像处理与绘制 1.1 QImage和QPixImage 设备无关图像类-QImag ...

  8. 用RVIZ2显示毫米波雷达点云

    ROS2用RVIZ2显示点云 RVIZ2支持的格式如下图 毫米波雷达和激光雷达的数据可以考虑用点云显示,也即PointCloud和PointCloud2,这里采用PointCloud. 首先查看Poi ...

  9. 解决在ROS系统下录制Ti毫米波雷达点云数据,并转换成pcd文件时间戳为零的问题

    问题描述 本人使用的是TI公司的AWR1443BOOST,运行官方的ROS Point Cloud Visualizer示例,可以得到二维和三维的点云信息.利用rosbag record命令可以记录一 ...

  10. matlab Lidar Camara Calibrator使用方法及雷达点云对相机的标定

    标定过程 标定数据导入matlab lidar camara calibrator 插件,点击图示中的Import后选择Import Data如图所示: 依次选择导入图像和点云数据如下后点击" ...

最新文章

  1. const reference const
  2. 递归三:变态蛙跳台阶
  3. struc,union,class的内存对齐方式
  4. 分享一篇关于“每日优鲜”的PRD文档
  5. 搭建Sql Server AlwaysOn 视频教程
  6. Android笔记 simpleAdapter demo
  7. 计算机主机硬件详细介绍,计算机系统的硬件和系统软件详细介绍
  8. php 去除零宽度空格,如何在PHP变量中去除空格?
  9. 一个很好用的,免费的UML在线画图网站
  10. Android常用库整理
  11. Win10虚拟机性能优化
  12. 一、Geos库的安装和计算多边形是否相交
  13. 论劳动生产力进步的原因,兼论劳动产品在不同阶级人民之间自然分配顺序(读后感)
  14. 【C语言】【结构体】复数类型加减乘除的实现
  15. 完美移除ESXI 7.0默认120G虚拟闪存,并支持自由调整,释放被占用的磁盘空间
  16. (二)改掉这些坏习惯,还怕写不出优雅的代码?
  17. Navicat Data Modeler(ndm2)数据模型逆向生成表
  18. Jetson AGX xavier测试六叶树Usb转Can卡通信记录笔记
  19. 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
  20. Android去除EditText的聚焦Focuse

热门文章

  1. MeasureSpec笔记
  2. 如何设置.net控件SplitContainer平均分配
  3. 融合多自然语言处理任务的中医辅助诊疗方案研究——以糖尿病为例
  4. html中qq咨询的代码,QQ样式的在线客服代码
  5. 令牌桶限流-java实现
  6. 以虎丘塔影园的数字化项目,窥考古与实景三维的异业合作
  7. J-Link软件和文档包的版本发行说明(1)[V3.00d ~ V4.94j版本]
  8. 软件的发展历史(时间轴)
  9. Linux下安装海康威视工业相机客户端
  10. duilib介绍-1