QtDataVisualization 数据3D可视化

        Data Visualization的三维显示功能主要由三种三维图形来实现,分别是三维柱状图Q3DBars,三维空间散点Q3DScatter,三维曲面Q3DSurface。这三个类的父类都是QAbstract3DGraph,从QWindow继承而来。

        Data Visualization与Qt Charts类似都是基于Qt Graphics View的图形视图结构,所以一个三维图形也是由图表、序列、坐标轴等元素构成。响应的序列类有:QBar3DSeries,QScatter3DSeries,QSurface3DSeries类。这三个序列类是与图形类Q3DBars,Q3DScatter,Q3DSurface一一对应的。在一个图中可以有多个同类型的序列,但不能有不同类型的序列。另外,三维图形也有坐标轴类,共有两种坐标轴类:QValue3DAxis和QCategory3DAxis,前者用于数值型坐标轴,后者用于文字型坐标轴。

        Data Visualization模块中还有数据代理(Data Proxies),数据代理类就是与序列对应,用于存储序列的数据的类。这也涉及一些具体的功能类:QBarDataProxy,QScatterDataProxy和QSurfaceDataProxy,这也与三种图表一一对应。

        

 本文作者原创,转载请附上文章出处与本文链接。

QtDataVisualization 数据3D可视化目录

1 .h 源代码

2 三维散点图

3 三维柱状图

4  三维曲面


        说明: 本文章使用QT6 开发  和  QT5 略有区别,QT5 版本 和 QT6 版本在文章末尾都会附上链接供5参考和下载。

        图标可以滚轮缩放、360旋转、阴影效果。

1 .h 源代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 




QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void InitGraph3D();


private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;

    Q3DBars *graph3D=nullptr;  //三维图表

    QBar3DSeries *series=nullptr; //序列

    QHeightMapSurfaceDataProxy *proxy=nullptr; //数据代理

    Q3DSurface *graph3DSurface=nullptr;

    QSurface3DSeries *seriesSurface=nullptr;

    QWidget *centerWgt=nullptr;

    bool m_bClick=false;
    QPoint m_Point;

    int m_Zoom=100;

};
#endif // MAINWINDOW_H

2 三维散点图

    //创建Q3DScatter三维散点图类对象
    Q3DScatter *scatter;
    scatter=new Q3DScatter();
    centerWgt=QWidget::createWindowContainer(scatter);
    scatter->setFlags(scatter->flags() ^ Qt::FramelessWindowHint);
    //新建序列和数据,在序列中加入3个点,把序列添加到图形
    QScatter3DSeries *series = new QScatter3DSeries;
    QScatterDataArray data;
    data << QVector3D(0.5f, 0.5f, 0.5f) << QVector3D(-0.3f, -0.5f, -0.4f) << QVector3D(0.0f, -0.3f, 0.2f);
    series->dataProxy()->addItems(data);
    scatter->addSeries(series);

QtDataVisualization 数据3D可视化_第1张图片

3 三维柱状图

    //构造一个三维柱状图对象
    Q3DBars *bars;
    bars=new Q3DBars();
    centerWgt=QWidget::createWindowContainer(bars);
    bars->setFlags(bars->flags() ^ Qt::FramelessWindowHint);	//top level
    //设置坐标轴的显示范围
    bars->rowAxis()->setRange(0, 4);
    bars->columnAxis()->setRange(0, 4);
    //创建5行数据,放入序列,添加到图形
    QBar3DSeries *series = new QBar3DSeries;
    QBarDataRow *data = new QBarDataRow;
    *data << 1.0f << 3.0f << 7.5f << 5.0f << 2.2f;
    series->dataProxy()->addRow(data);
    bars->addSeries(series);

QtDataVisualization 数据3D可视化_第2张图片

QtDataVisualization 数据3D可视化_第3张图片

4  三维曲面

    //创建一个三维曲面对象
    Q3DSurface *surface;
    surface=new Q3DSurface();
    centerWgt=QWidget::createWindowContainer(surface);
    surface->setFlags(surface->flags() ^ Qt::FramelessWindowHint);
    //创建数据对象
    QSurfaceDataArray *data = new QSurfaceDataArray;
    QSurfaceDataRow *dataRow1 = new QSurfaceDataRow;
    QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
    //为数据对象赋值
    *dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f);
    *dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f);
    *data << dataRow1 << dataRow2;
    //创建序列,加入数据,添加到Q3DSurface
    QSurface3DSeries *series = new QSurface3DSeries;
    series->dataProxy()->resetArray(data);
    surface->addSeries(series);

QtDataVisualization 数据3D可视化_第4张图片

 QtDataVisualization 数据3D可视化_第5张图片

资源链接:QtDataVisualization三维控件-C++文档类资源-CSDN下载

密码: https://blog.csdn.net/qq_37529913?type=blog

 其它文章 :

QT TextEdit控件_双子座断点的博客-CSDN博客_qt textedit

QT QComboBox使用详解_双子座断点的博客-CSDN博客

QT QtableView操作详解_双子座断点的博客-CSDN博客_qtableview增删改查

Qt QStandardItemModel(1.超级详细用法)_双子座断点的博客-CSDN博客_qstandardmodel

Qt QStandardItemModel(2.超级详细函数)_双子座断点的博客-CSDN博客_qstandarditemmodel点击事件

QT QRadioButton使用详解_双子座断点的博客-CSDN博客_qt radiobutton

QT QLineEdit使用详解_双子座断点的博客-CSDN博客_qt qlineedit

Qt QMessageBox使用详解_双子座断点的博客-CSDN博客_qt message

QChart折线图、饼状图、条形图、曲线图_双子座断点的博客-CSDN博客_qchart样式

QChart属性详解_双子座断点的博客-CSDN博客_setanimationoptions

QCharts QValueAxis使用_双子座断点的博客-CSDN博客_qvalueaxis

Qt 5 等待提示框(开源 动态图)_双子座断点的博客-CSDN博客_qt 等待对话框

QtDataVisualization 数据3D可视化_双子座断点的博客-CSDN博客_qtdatavisualization

你可能感兴趣的:(QT控件使用详解,3d)