有时候我们的数据要用三维坐标显示。最近做了个小案例,分享一下源码。

备注:滚轮可缩放,右键可旋转。

目录

配置安装

源码

工程文件包


配置安装

Qt的三维坐标要用到Data Visualization模块,需要用Qt Maintenance Tool安装这个模块。

源码

pro文件

QT       += core gui datavisualizationgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp文件不变就不展示了。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include <QtDataVisualization>
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_comboCamera_currentIndexChanged(int index);void on_sliderH_valueChanged(int value);void on_sliderV_valueChanged(int value);void on_sliderZoom_valueChanged(int value);void on_comboTheme_currentIndexChanged(int index);void on_checkBoxBackground_clicked(bool checked);void on_checkBoxGrid_clicked(bool checked);void on_checkBoxAxisBackground_clicked(bool checked);void on_pushButtonAddData_clicked();private:QWidget *graphContainer;  //图表的容器Q3DScatter *graph3D;   //散点图QScatter3DSeries *series;  //散点序列void initGraph3D();  //初始化public://为实现数据共享,公共化参数QScatterDataArray *dataArray;QScatterDataItem *ptrToDataArray;private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QSplitter>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);initGraph3D(); //初始化散点图ui->verticalLayout_graph3D->addWidget(graphContainer);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initGraph3D()
{//创建图表graph3D = new Q3DScatter();graphContainer = QWidget::createWindowContainer(graph3D);QScatterDataProxy *proxy = new QScatterDataProxy(); //数据代理series = new QScatter3DSeries(proxy); //创建序列series->setItemLabelFormat("@xLabel @yLabel @zLabel");series->setMeshSmooth(true);graph3D->addSeries(series);//创建坐标轴graph3D->axisX()->setTitle("axis X");graph3D->axisX()->setTitleVisible(true);graph3D->axisY()->setTitle("axis Y");graph3D->axisY()->setTitleVisible(true);graph3D->axisZ()->setTitle("axis Z");graph3D->axisZ()->setTitleVisible(true);graph3D->activeTheme()->setLabelBackgroundEnabled(false);series->setMesh(QAbstract3DSeries::MeshSphere);  //数据点为圆球series->setItemSize(0.2); //取值范围0~1 ,自动放缩因子int N = 41;int itemCount = N*N;dataArray = new QScatterDataArray();dataArray->resize(itemCount); //41*41个点ptrToDataArray = &dataArray->first();//墨西哥草帽, -10:0.5:10, N=41float x,y,z;int i,j;x=-10;for(i=1;i<N;i++){y=10;for(j=1;j<=N;j++){z=qSqrt(x*x+y*y);if(z!=0){z=10*qSin(z)/z;}else{z=10;}ptrToDataArray->setPosition(QVector3D(x,y,z)); //添加点数据ptrToDataArray++;//指针加一y+=0.5;}x+=0.5;}series->dataProxy()->resetArray(dataArray);}void MainWindow::on_comboCamera_currentIndexChanged(int index)
{Q3DCamera::CameraPreset cameraPos = Q3DCamera::CameraPreset(index);graph3D->scene()->activeCamera()->setCameraPreset(cameraPos);
}void MainWindow::on_sliderH_valueChanged(int value)
{Q_UNUSED(value);int xRot = ui->sliderH->value();  //水平int yRot = ui->sliderV->value();  //垂直int zoom = ui->sliderZoom->value();  //缩放graph3D->scene()->activeCamera()->setCameraPosition(xRot, yRot, zoom);}void MainWindow::on_sliderV_valueChanged(int value)
{Q_UNUSED(value);int xRot = ui->sliderH->value();  //水平int yRot = ui->sliderV->value();  //垂直int zoom = ui->sliderZoom->value();  //缩放graph3D->scene()->activeCamera()->setCameraPosition(xRot, yRot, zoom);
}void MainWindow::on_sliderZoom_valueChanged(int value)
{Q_UNUSED(value);int xRot = ui->sliderH->value();  //水平int yRot = ui->sliderV->value();  //垂直int zoom = ui->sliderZoom->value();  //缩放graph3D->scene()->activeCamera()->setCameraPosition(xRot, yRot, zoom);
}void MainWindow::on_comboTheme_currentIndexChanged(int index)
{//设置主题Q3DTheme *currentTheme = graph3D->activeTheme();currentTheme->setType(Q3DTheme::Theme(index));  //可以打开帮助看有什么主题}void MainWindow::on_checkBoxBackground_clicked(bool checked)
{//图表的背景graph3D->activeTheme()->setBackgroundEnabled(checked);
}void MainWindow::on_checkBoxGrid_clicked(bool checked)
{//图标的网格graph3D->activeTheme()->setGridEnabled(checked);
}void MainWindow::on_checkBoxAxisBackground_clicked(bool checked)
{//轴标签背景graph3D->activeTheme()->setLabelBackgroundEnabled(checked);
}void MainWindow::on_pushButtonAddData_clicked()
{int N = 42;int itemCount = N*N;
//    dataArray = new QScatterDataArray();dataArray->resize(itemCount); //41*41个点
//    ptrToDataArray = &dataArray->first();int x=0;int y=0;int z=0;//产生0~9的随机数qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for(int i=0; i<10; i++){x =qrand()%10;y =qrand()%10;z =qrand()%10;}ptrToDataArray->setPosition(QVector3D(x,y,z)); //添加点数据ptrToDataArray++;//指针加一series->dataProxy()->resetArray(dataArray); //更新数据}

工程文件包

3DScatterChart.zip-QT文档类资源-CSDN下载Qt3D散点图更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/laoxue123456/38621029

Qt 三维数据显示之散点图(C++源码)相关推荐

  1. QT学习之经典控件源码(如此强大)

    进来好好学习了QT,研究了很多别人的源码,在绘图方面原来QT也是如此强大!                                             源码下载: /Files/feiya ...

  2. cesium等高线_Cesium开源三维地球离线地图发布源码示例功能

    一.概述 Cesium开源三维地球离线地图发布源码提供了地图切换.查询定位.模型加载.专题图叠加显示和测量功能等,旨在为用户提供一个可以在Cesium快速加载离线地图或在线地图的解决方案,并提供技术支 ...

  3. Qt可视化大屏电子看板系统源码

    Qt可视化大屏电子看板系统源码 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件. 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向 ...

  4. 【飞行器】基于matlab四旋翼飞行器三维动态仿真【含Matlab源码 269期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab四旋翼飞行器三维动态仿真[含Matlab源码 269期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. Cesium开源三维地球离线地图发布源码示例功能

    一.概述 Cesium开源三维地球离线地图发布源码提供了地图切换.查询定位.模型加载.专题图叠加显示和测量功能等,旨在为用户提供一个可以在Cesium快速加载离线地图或在线地图的解决方案,并提供技术支 ...

  6. 三维后处理与重建PACS源码,大容量图像存储 报告单多种模式及自定义样式

    医学影像系统源码 三维后处理与重建PACS源码 医学影像系统由PACS系统.RIS系统组成,同时提供与HIS的接口(HL7或其他类型). 主要功能介绍 信息预约登记 支持对患者.检查项目.申请医生.申 ...

  7. 医学影像系统源码,三维后处理和重建 PACS源码

    医学影像系统源码,三维后处理和重建 PACS源码 医学影像系统由PACS系统.RIS系统组成,提供与HIS的接口(HL7或其他类型). 主要功能介绍 信息预约登记 支持对患者.检查项目.申请医生.申请 ...

  8. 【精选】uboot/linux/qt/busybox/opengl/yaffs/lzop/glibc源码下载地址

    随着Linux.Android等开源平台和开源项目的推广和应用,它们所带来的开源思维也更加深入的普及到更多领域.现在,非常多的项目都推崇开源分享了(当然,商业盈利模式的应用仍然是要收费的,此处不讨论这 ...

  9. Qt项目开发实例 (含源码)

    目录 1. QT开发环境安装以配置. 2. QT线段画板实战 3. 半小时玩转QT桌面系统托盘(含托盘消息) 4. QT入门开发一个时钟 5. 半小时教你做大转盘游戏(QT篇) 6. 手把手教你制作[ ...

最新文章

  1. SAP UI5 数据绑定之高级技巧 - Type System
  2. python基础-super
  3. C++代理 Surrogate
  4. 社区出入登记源码1.0.53完整安装包+小程序前端+公众号
  5. pytest十二:cmd命令行参数
  6. Python 学习线路图,码住!
  7. mysql 读未提交数据,MySql数据库的事务隔离级别学习
  8. python3.9性能_谁说Python性能差的
  9. 2.1数据库-MySQL
  10. web前端-写给大家看的设计书-笔记-颜色运用-色轮使用
  11. 最好的 QML 教程,让你的代码飞起来!
  12. AB罗克韦尔plc指示灯详解
  13. 本地自签https证书
  14. 2015年最新苹果开发者账号注册流程详解
  15. Python音乐下载
  16. 数据脱敏:保障数据安全的脱敏方案
  17. CRF++安装教程(含Windows和Linux两个版本)
  18. 字节跳动最爱考的前端面试题:Node.js 基础
  19. React.Meno
  20. (私人收藏)灰蓝绿3种风格的套图图标

热门文章

  1. web前端+HTML5+CSS3学习笔记
  2. 2015蓝桥杯python——奇妙的数字
  3. python学习笔记---IO编程【廖雪峰】
  4. 中途取消安装 Microsoft Office profession plus 2010卸载不了怎么办?
  5. 推荐一款图片放大不失真的软件-PhotoZoom
  6. MySQL练习题 答案和解析
  7. 数学界“诺奖”阿贝尔奖揭晓,颁给数学与计算机交叉学科,奖金约合575万元...
  8. 用友夯实底座,ISV深耕行业,迈向同一个目标
  9. 机器视觉应用方向及学习思路总结
  10. morton码_求矩阵四叉树的四进制和十进制Morton码