.pro文件
1 #-------------------------------------------------
2 # 3 # Project created by QtCreator 2019-01-10T15:27:17
4 # 5 #-------------------------------------------------
6
7
8 QT += core gui 9 QT +=datavisualization 10
11
12 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 13
14
15 TARGET = samp10_1 16 TEMPLATE = app 17
18
19 # The following define makes your compiler emit warnings if you use 20 # any feature of Qt which has been marked as deprecated (the exact warnings 21 # depend on your compiler). Please consult the documentation of the 22 # deprecated API in order to know how to port your code away from it. 23 DEFINES += QT_DEPRECATED_WARNINGS 24
25
26 # You can also make your code fail to compile if you use deprecated APIs. 27 # In order to do so, uncomment the following line. 28 # You can also select to disable deprecated APIs only up to a certain version of Qt. 29 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
30
31
32 CONFIG += c++11
33
34
35 SOURCES += \ 36 main.cpp \ 37 mainwindow.cpp 38
39
40 HEADERS += \ 41 mainwindow.h 42
43
44 FORMS += \ 45 mainwindow.ui 46
47
48 # Default rules for deployment. 49 qnx: target.path = /tmp/$${TARGET}/bin 50 else: unix:!android: target.path = /opt/$${TARGET}/bin 51 !isEmpty(target.path): INSTALLS += target
mainwindow.h
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H
3
4
5 #include <QMainWindow>
6 #include <QSplitter>
7 #include <QCategory3DAxis>
8 #include <QtDataVisualization>
9 using namespace QtDataVisualization; 10
11
12 namespace Ui { 13 class MainWindow; 14 } 15
16
17 class MainWindow : public QMainWindow 18 { 19 Q_OBJECT 20 private: 21 QWidget *graphContainer;//圖標的容器
22 Q3DBars *graph3D;//圖表
23 QBar3DSeries *series;//圖標的序列
24 void iniGraph3D();//繪制圖表
25 public: 26 explicit MainWindow(QWidget *parent = nullptr); 27 ~MainWindow(); 28
29 private slots: 30 void on_comboCamera_currentIndexChanged(int index); 31
32 void on_sliderH_valueChanged(int value); 33
34 void on_sliderV_valueChanged(int value); 35
36 void on_sliderZoom_valueChanged(int value); 37
38 void on_cBoxTheme_currentIndexChanged(int index); 39
40 void on_cBoxBarStyle_currentIndexChanged(int index); 41
42 void on_cBoxSelectionMode_currentIndexChanged(int index); 43
44 void on_chkBoxBackground_clicked(bool checked); 45
46 void on_chkBoxGrid_clicked(bool checked); 47
48 void on_chkBoxAxisBackground_clicked(bool checked); 49
50 void on_chkBoxItemLabel_clicked(bool checked); 51
52 void on_chkBoxSmooth_clicked(bool checked); 53
54 void on_chkBoxReverse_clicked(bool checked); 55
56 void on_chkBoxReflection_clicked(bool checked); 57
58 void on_chkBoxAxisTitle_clicked(bool checked); 59
60 void on_spinFontSize_valueChanged(const QString &arg1); 61
62 void on_spinFontSize_valueChanged(int arg1); 63
64 private: 65 Ui::MainWindow *ui; 66 }; 67
68
69 #endif // MAINWINDOW_H
70 #ifndef MAINWINDOW_H 71 #define MAINWINDOW_H
72
73
74 #include <QMainWindow>
75 #include <QSplitter>
76 #include <QCategory3DAxis>
77 #include <QtDataVisualization>
78 using namespace QtDataVisualization; 79
80
81 namespace Ui { 82 class MainWindow; 83 } 84
85
86 class MainWindow : public QMainWindow 87 { 88 Q_OBJECT 89 private: 90 QWidget *graphContainer;//圖標的容器
91 Q3DBars *graph3D;//圖表
92 QBar3DSeries *series;//圖標的序列
93 void iniGraph3D();//繪制圖表
94 public: 95 explicit MainWindow(QWidget *parent = nullptr); 96 ~MainWindow(); 97
98 private slots: 99 void on_comboCamera_currentIndexChanged(int index); 100
101 void on_sliderH_valueChanged(int value); 102
103 void on_sliderV_valueChanged(int value); 104
105 void on_sliderZoom_valueChanged(int value); 106
107 void on_cBoxTheme_currentIndexChanged(int index); 108
109 void on_cBoxBarStyle_currentIndexChanged(int index); 110
111 void on_cBoxSelectionMode_currentIndexChanged(int index); 112
113 void on_chkBoxBackground_clicked(bool checked); 114
115 void on_chkBoxGrid_clicked(bool checked); 116
117 void on_chkBoxAxisBackground_clicked(bool checked); 118
119 void on_chkBoxItemLabel_clicked(bool checked); 120
121 void on_chkBoxSmooth_clicked(bool checked); 122
123 void on_chkBoxReverse_clicked(bool checked); 124
125 void on_chkBoxReflection_clicked(bool checked); 126
127 void on_chkBoxAxisTitle_clicked(bool checked); 128
129 void on_spinFontSize_valueChanged(const QString &arg1); 130
131 void on_spinFontSize_valueChanged(int arg1); 132
133 private: 134 Ui::MainWindow *ui; 135 }; 136
137
138 #endif // MAINWINDOW_H
mainwindow.cpp
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3
4
5 MainWindow::MainWindow(QWidget *parent) : 6 QMainWindow(parent), 7 ui(new Ui::MainWindow) 8 { 9 ui->setupUi(this); 10 iniGraph3D(); 11 QSplitter *splitter =new QSplitter(Qt::Horizontal); 12 splitter->addWidget(ui->groupBox); 13 splitter->addWidget(graphContainer); 14 this->setCentralWidget(splitter); 15
16
17 } 18 MainWindow::~MainWindow() 19 { 20 delete ui; 21 } 22 void MainWindow::iniGraph3D() 23 { 24 //創建圖表
25 graph3D =new Q3DBars(); 26 graphContainer=QWidget::createWindowContainer(graph3D); 27 //創建坐標軸
28 QStringList rowLabs; 29 QStringList colLabs; 30 rowLabs<<"row1"<<"row2"<<"row3"; 31 colLabs<<"col1"<<"col2"<<"col3"<<"col4"<<"col5"; 32 QValue3DAxis *axisV=new QValue3DAxis; 33 axisV->setTitle("value"); 34 axisV->setTitleVisible(true); 35 QCategory3DAxis *axisRow=new QCategory3DAxis;//行坐標軸
36 axisRow->setTitle("row axis"); 37 axisRow->setLabels(rowLabs); 38 axisRow->setTitleVisible(true); 39 QCategory3DAxis *axisCol=new QCategory3DAxis;//列坐標軸
40 axisCol->setTitle("col axis"); 41 axisCol->setLabels(colLabs); 42 axisCol->setTitleVisible(true); 43 //將坐標軸添加到圖像
44 graph3D->setRowAxis(axisRow); 45 graph3D->setValueAxis(axisV); 46 graph3D->setColumnAxis(axisCol); 47 //創建序列
48 series =new QBar3DSeries; 49 series->setMesh(QAbstract3DSeries::MeshCylinder);//棒狀形狀
50 series->setItemLabelFormat("(@rowLabel,@colLabel):%.1f");//標簽格式
51 graph3D->addSeries(series); 52 //添加數據
53 QBarDataArray *dataSet=new QBarDataArray;//數據數組
54 dataSet->reserve(rowLabs.count()); 55 QBarDataRow *dataRow=new QBarDataRow; 56 *dataRow<<1<<2<<3<<4<<5; 57 dataSet->append(dataRow); 58 QBarDataRow *dataRow2=new QBarDataRow; 59 *dataRow2<<5<<5<<5<<5<<5; 60 dataSet->append(dataRow2); 61 QBarDataRow *dataRow3=new QBarDataRow; 62 *dataRow3<<1<<5<<9<<5<<1; 63 dataSet->append(dataRow3); 64
65
66 //為序列的數據代理設置數據
67 series->dataProxy()->resetArray(dataSet); 68 } 69
70
71 /** 72 * @brief MainWindow::on_comboCamera_currentIndexChanged 73 * @param index 74 */
75 void MainWindow::on_comboCamera_currentIndexChanged(int index) 76 { 77 //變換視角
78 Q3DCamera::CameraPreset cameraPos=Q3DCamera::CameraPreset(index);//將序號轉換成Q3DCamera::CameraPreset類型
79 graph3D->scene()->activeCamera()//獲取當前圖標視角
80 ->setCameraPreset(cameraPos);//設置視角
81 } 82
83
84 void MainWindow::on_sliderH_valueChanged(int value) 85 { 86 Q_UNUSED(value); 87 int xRot=ui->sliderH->value(); 88 //int yRot=ui->sliderV->value(); 89 //int zoom=ui->sliderZoom->value();
90 graph3D->scene()->activeCamera()->setXRotation(xRot); 91 //graph3D->scene()->activeCamera()->setYRotation(yRot); 92 //graph3D->scene()->activeCamera()->setZoomLevel(zoom);
93 } 94
95
96 void MainWindow::on_sliderV_valueChanged(int value) 97 { 98 Q_UNUSED(value); 99 int yRot=ui->sliderV->value(); 100 graph3D->scene()->activeCamera()->setYRotation(yRot); 101 } 102
103
104 void MainWindow::on_sliderZoom_valueChanged(int value) 105 { 106 Q_UNUSED(value); 107 int zoom=ui->sliderZoom->value(); 108 graph3D->scene()->activeCamera()->setZoomLevel(zoom); 109 } 110 //修改主題
111 void MainWindow::on_cBoxTheme_currentIndexChanged(int index) 112 { 113 Q3DTheme *currentTheme=graph3D->activeTheme(); 114 currentTheme->setType(Q3DTheme::Theme(index)); 115 } 116 //修改棒圖樣式
117 void MainWindow::on_cBoxBarStyle_currentIndexChanged(int index) 118 { 119 QAbstract3DSeries::Mesh aMesh; 120 aMesh=QAbstract3DSeries::Mesh(index+1); 121 series->setMesh(aMesh); 122 } 123 //修改選擇模式
124 void MainWindow::on_cBoxSelectionMode_currentIndexChanged(int index) 125 { 126 graph3D->setSelectionMode(QAbstract3DGraph::SelectionFlags(index)); 127 } 128 //背景可見
129 void MainWindow::on_chkBoxBackground_clicked(bool checked) 130 { 131 graph3D->activeTheme()->setBackgroundEnabled(checked); 132 } 133 //背景網絡
134 void MainWindow::on_chkBoxGrid_clicked(bool checked) 135 { 136 graph3D->activeTheme()->setGridEnabled(checked); 137
138
139 } 140
141
142 //坐標軸標簽背景可見
143 void MainWindow::on_chkBoxAxisBackground_clicked(bool checked) 144 { 145 graph3D->activeTheme()->setLabelBackgroundEnabled(checked); 146 } 147 //項的標簽可見
148 void MainWindow::on_chkBoxItemLabel_clicked(bool checked) 149 { 150 series->setItemLabelFormat("value at (@rowLabel,@colLabel):%.1f"); 151 series->setItemLabelVisible(checked); 152 } 153 //光滑
154 void MainWindow::on_chkBoxSmooth_clicked(bool checked) 155 { 156 series->setMeshSmooth(checked); 157 } 158 //數值軸反轉
159 void MainWindow::on_chkBoxReverse_clicked(bool checked) 160 { 161 graph3D->valueAxis()->setReversed(checked); 162 } 163 //設置倒影
164 void MainWindow::on_chkBoxReflection_clicked(bool checked) 165 { 166 graph3D->setReflection(checked); 167 } 168 //標簽可見
169 void MainWindow::on_chkBoxAxisTitle_clicked(bool checked) 170 { 171 graph3D->rowAxis()->setTitleVisible(checked); 172 graph3D->columnAxis()->setTitleVisible(checked); 173 graph3D->valueAxis()->setTitleVisible(checked); 174 } 175
176
177 void MainWindow::on_spinFontSize_valueChanged(const QString &arg1) 178 { 179
180
181 } 182 //設置字體大小
183 void MainWindow::on_spinFontSize_valueChanged(int arg1) 184 { 185 QFont font=graph3D->activeTheme()->font(); 186 font.setPointSize(arg1); 187 graph3D->activeTheme()->setFont(font); 188 }
運行結果