Qt Q3DScatter使用(三维可视图)

讲解都在注释中。

3d.pro文件

 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2018-03-12T18:11:08
 4 #
 5 #-------------------------------------------------
 6  
 7 QT       += core gui datavisualization widgets
 8  
 9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10  
11 TARGET = 3d
12 TEMPLATE = app
13  
14 # The following define makes your compiler emit warnings if you use
15 # any feature of Qt which has been marked as deprecated (the exact warnings
16 # depend on your compiler). Please consult the documentation of the
17 # deprecated API in order to know how to port your code away from it.
18 DEFINES += QT_DEPRECATED_WARNINGS
19  
20 # You can also make your code fail to compile if you use deprecated APIs.
21 # In order to do so, uncomment the following line.
22 # You can also select to disable deprecated APIs only up to a certain version of Qt.
23 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
24 SOURCES += 
25         main.cpp 
26         mainwindow.cpp
27  
28 HEADERS += 
29         mainwindow.h
30  
31 FORMS += 
32         mainwindow.ui
33 target.path = $$[QT_INSTALL_EXAMPLES]/datavisualization/$$TARGET
34 INSTALLS += target

main.cpp

 1 #include "mainwindow.h"
 2 #include <QApplication>
 3 using namespace QtDataVisualization;
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7     MainWindow w;
 8     w.show();
 9     return a.exec();
10 }

mainwindows.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 #include <QtWidgets/QHBoxLayout>
 4 #include <QtWidgets/QVBoxLayout>
 5 #include "scatterdatamodifier.h"
 6 #include <QtWidgets/QMessageBox>
 7 using namespace QtDataVisualization;
 8  
 9 MainWindow::MainWindow(QWidget *parent) :
10     QMainWindow(parent),
11     ui(new Ui::MainWindow)
12 {
13     ui->setupUi(this);
14  
15     //创建一个三维坐标系
16     Q3DScatter *graph = new Q3DScatter();
17     //设置相机的位置
18     graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetBehindLow);
19     //设置阴影显示
20     graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
21     //设置坐标轴的范围
22     graph->axisX()->setRange(0, 480);
23     graph->axisY()->setRange(0, 480);
24     graph->axisZ()->setRange(0, 480);
25     //设置坐标轴的数量
26     graph->axisX()->setSegmentCount(int(480/20));
27     graph->axisY()->setSegmentCount(int(480/20));
28     graph->axisZ()->setSegmentCount(int(480/20));
29     //设置整体坐标系的主题
30     graph->activeTheme()->setType(Q3DTheme::ThemeQt);
31  
32     graph->axisX()->setLabelFormat("X");
33     graph->axisY()->setLabelFormat("Y");
34     graph->axisZ()->setLabelFormat("Z");
35  
36     //
37     QScatter3DSeries *series = new QScatter3DSeries;
38     //点,大小
39     series->setItemSize(0.05);
40     //点,坐标
41     QScatterDataArray data;
42  
43 //    data << QVector3D(0.5f, 0.5f, 0.5f);
44     //创建一个widget,将坐标系添加进去
45     QWidget *container = QWidget::createWindowContainer(graph);
46  
47     //判断是否graph(opengl)初始化
48     if (!graph->hasContext()) {
49         QMessageBox msgBox;
50         msgBox.setText("Couldn't initialize the OpenGL context.");
51         msgBox.exec();
52     }
53     //水平布局,父对象是wifget
54     QHBoxLayout *hLayout = new QHBoxLayout(ui->widget);
55     //垂直布局
56     QVBoxLayout *vLayout = new QVBoxLayout();
57     //将container添加到水平布局中
58     hLayout->addWidget(container, 1);
59     hLayout->addLayout(vLayout);
60     data.append(QVector3D(0.5f, 0.5f, 0.5f));
61     data.append(QVector3D(10, 10, 10));
62     series->dataProxy()->addItems(data);
63     graph->addSeries(series);
64 }
65  
66 MainWindow::~MainWindow()
67 {
68     delete ui;
69 }
70  
原文地址:https://www.cnblogs.com/ybqjymy/p/13395386.html