前段時間在Qt事例中看到了3D圖形,就參考案例,做了一個相似的demon.
不多說了,先看做的兩個效果圖吧。
工程文件:
1 QT += datavisualization 2 SOURCES += main.cpp
因為用的是3D,所以工程文件要加datavisualization。
主文件:
1 #include<QWidget>
2
3 #include <QtWidgets/QApplication>
4 #include"init_widget.h"
5 int main(int argc, char *argv[]) 6 { 7 QApplication app(argc, argv); 8 Q3DBars bars; 9 /*init_widget init(&bars);*/
10 bars.setFlags(bars.flags() ^ Qt::FramelessWindowHint); 11 bars.rowAxis()->setRange(0, 4); //設置圖形坐標范圍,row
12 bars.columnAxis()->setRange(0, 4);//設置圖形坐標范圍,colum 13 //其實和cahrt模塊很相似,先是創建serial,在創建數據,
14 QBar3DSeries *series = new QBar3DSeries; 15 //創建4組數據。
16 QBarDataRow *data = new QBarDataRow; 17 *data << 1.0f << 3.0f << 7.5f << 5.0f << 2.2f; 18 QBarDataRow *data1 = new QBarDataRow; 19 *data1 << 2.9f << 4.5f << 6.5f << 4.0f << 5.2f; 20 QBarDataRow *data2 = new QBarDataRow; 21 *data2 << 4.7f << 3.3f << 2.5f << 5.6f << 2.9f; 22 QBarDataRow *data3 = new QBarDataRow; 23 *data3 << 5.0f << 2.8f << 6.5f << 4.9 << 6.8f; 24 //將數據添加進seiral中。
25 series->dataProxy()->addRow(data); 26 series->dataProxy()->addRow(data1); 27 series->dataProxy()->addRow(data2); 28 series->dataProxy()->addRow(data3); 29 //將serial加入到3d對象中。
30 bars.addSeries(series); 31 //設置Z軸坐標
32 QValue3DAxis *value=new QValue3DAxis; 33 value->setTitle("Average temperature");//設置標題
34 value->setTitleVisible(true);//記得默認是false
35 value->setSegmentCount(3);//z軸分為3大段
36 value->setSubSegmentCount(2);//沒大段分為2個空間間隙
37 value->setLabelFormat(QString(QStringLiteral("%.2f ") + "C"));//這個就不說了,,,
38 value->setLabelAutoRotation(30.0f);//設置標簽的角度
39 bars.setValueAxis(value); 40 //設置X,Y的坐標
41 QCategory3DAxis *axis=new QCategory3DAxis; 42 QStringList list; 43 list<<"周一"<<"周二"<<"周三"<<"周四"; 44 axis->setLabels(list); 45 axis->setLabelAutoRotation(30.0f); 46 bars.setRowAxis(axis); 47
48 bars.show(); 49 /*init.show_widget();*/
50 return app.exec(); 51 }
其實和chart模塊很相似,
1:創建3d對象,
Q3DBars bars;
2:創建數據串
QBar3DSeries *series = new QBar3DSeries;
3:添加數據
1 QBarDataRow *data = new QBarDataRow; 2 *data << 1.0f << 3.0f << 7.5f << 5.0f << 2.2f; 3 QBarDataRow *data1 = new QBarDataRow; 4 *data1 << 2.9f << 4.5f << 6.5f << 4.0f << 5.2f; 5 QBarDataRow *data2 = new QBarDataRow; 6 *data2 << 4.7f << 3.3f << 2.5f << 5.6f << 2.9f; 7 QBarDataRow *data3 = new QBarDataRow; 8 *data3 << 5.0f << 2.8f << 6.5f << 4.9 << 6.8f;
4.將數據添加到數據串中
1 series->dataProxy()->addRow(data); 2 series->dataProxy()->addRow(data1); 3 series->dataProxy()->addRow(data2); 4 series->dataProxy()->addRow(data3);
5:將數據串加入到3d對象中
bars.addSeries(series);
6.:顯示
bars.show();