摘要:本文主要使用QT5,实现了一个传感器云平台的小示例,模拟的是各类传感器的添加,例如:热成像传感器、温度传感器、超声波传感器,模拟添加完成后,会自动将此传感器的三维坐标增加到3D散点图上,3D散点图可以放大缩小。本文主要目的是通过一个小示例,做一些小效果。
文中源码文件【获取方式】:关注公众号:利哥AI实例探险, 给公众号发送 “qt传感器平台”
获取下载方式,关注发送关键字即可获取下载方式,无套路。由于本人能力有限,难免有疏漏之处。
1. 系统演示
传感器云平台
2. 逻辑实现
- 使用QT Design拖拽窗口及按钮,并通过CSS设置界面效果。
- 主要使用QTableWidget,并作CSS优化
- 3D部分主要使用Q3DScatter,Q3DScatter 是 Qt Data Visualization 模块中的一个类,用于创建和管理 3D 散点图。它提供了将数据以三维点云形式可视化的功能,使得用户可以直观地观察和分析三维数据分布。Q3DScatter 在数据可视化、科学研究、工程设计等领域有广泛应用。
Q3DScatter 提供了许多功能和属性,允许用户自定义和控制 3D 散点图的外观和行为。以下是 Q3DScatter 的一些核心概念:
- Q3DScatter:表示整个 3D 散点图对象,包含所有的数据点和渲染设置。
- QScatter3DSeries:表示一组数据点,包含数据点的坐标和其他属性。
- QScatterDataItem:表示单个数据点,包含 x、y、z 坐标。
- Q3DTheme:表示 3D 图表的主题,控制图表的配色方案、字体、背景等。
- QValue3DAxis:表示坐标轴,用于设置轴的范围、标签和刻度等属性。
m_scatter = new Q3DScatter;
// 创建数据代理和系列
m_proxy = new QScatterDataProxy();
m_series = new QScatter3DSeries(m_proxy);
m_scatter->addSeries(m_series);
// 设置主题和效果
m_scatter->activeTheme()->setType(Q3DTheme::ThemeQt);
m_scatter->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow);
// 设置背景颜色
m_scatter->activeTheme()->setBackgroundEnabled(true);
m_scatter->activeTheme()->setBackgroundColor(QColor(14, 26, 50)); // 黑色颜色
m_scatter->activeTheme()->setGridEnabled(false); // 禁用网格以增强星空效果
// 设置点的颜色
m_series->setItemSize(0.3f); // 调整点的大小
m_series->setBaseColor(QColor(255, 255, 255)); // 白色点
// 设置视角
m_scatter->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFrontHigh);
m_scatter->scene()->activeCamera()->setPosition(QVector3D(0, 0, 50)); // 设置相机位置
m_scatter->scene()->activeCamera()->setTarget(QVector3D(0, 0, 0)); // 设置目标
// 连接点击事件信号和槽
connect(m_series, &QScatter3DSeries::selectedItemChanged, this, &Dlgradar::handleItemClicked);
void Dlgradar::addPoint(float x, float y, float z, QString additionalInfo)
{
QScatterDataItem item;
item.setPosition(QVector3D(x, y, z));
// 创建额外信息
PointInfo info = {x, y, z, additionalInfo};
m_pointInfoMap[m_proxy->itemCount()] = info;
m_proxy->addItem(item);
}
void Dlgradar::handleItemClicked(int index)
{
// 无效索引
if (index == -1) {
return;
}
if (m_pointInfoMap.contains(index)) {
const PointInfo &info = m_pointInfoMap[index];
QString szLog = QString("(%1, %2, %3)--%4")
.arg(info.x).arg(info.y).arg(info.z).arg(info.additionalInfo);
ui->label->setText(szLog);
qDebug() << "====" << szLog.toUtf8().data();
}
}
往期文章回顾
【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 | 【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示 |
---|---|
【深度学习】行人跌倒行为检测软件系统 | 【深度学习】火灾检测软件系统 |
【深度学习】吸烟行为检测软件系统 | 【深度学习】数竹签演示软件系统 |
【深度学习】菜品目标检测软件系统 | QT5集成FTP实现文件及文件夹的下载 |
QT集成开源日志库示例 | python源码加密之Cython方案简单示例 |
【python源码加密】Cython针对python工程多层级目录处理办法 | http服务网络请求如何确保数据安全(含python示例源码) |
http请求数据传输时确保完整性和保密性方案(含源码) | QT集成百度在线地图JS API实现交互及特定效果 |
【qt小游戏】小老鼠闯迷宫小游戏(附源码) | 【qt小系统】传感器云平台3D散点图(附源码) |