三维图表显示
三维图表类主要有Q3DBars\Q3DScatter/Q3DSurface组成
他们基于类QAbstract3DGraph。
与QChart类似
数据类包括
QBar3DSeries/QScatter3DSeries/QSurface3DSeries
轴也是差不多
QAbstract3DAxis
包括了QCategory3DAxis和QValue3DAxis。除了多3D字母。其他的几乎相同。
有区别的时,3D图表包括一个数据代理Data Proxies。主要用于存储序列的数据的类。
图形不一样,存储的数据代理也不一样。分别有如下这些:
QBarDataProxy->QItemModelBarDataProxy
QScatterDataProxy->QItemModelScafferdataProxy
QSuffaceDataProxy->QHeightMapSurfaceDataProxy、QItemModelSurfaceDataProxy
为什么要用代理呢?
3D表示的数据很多。数据量大,必须用缓冲填充的方式使用代理是性能表现更良好。
使用3D图表需要在pro加入
QT +=...... datavisualization
引用加入
#include<QtDataVisualization>
using namespace QtDataVisualization;
下面的应用实例:
Q3DBars d3=new Q3DBars;
QValue3DAxis * value = new QValue3DAxis ;
value ->setTitle("value");
value ->setTitleVisible(true);
QCategory3DAxis *col = new QCategory3DAxis;
QCategory3DAxis *row = new QCategory3DAxis;
col->setTitle("COL");
col->setTitleVisible(true);
col->setLables({标签列表});
row->setTitle("ROW");
row->setTitleVisible(true);
row->setLabels({标签列表});
d3->setValueAxis(value);
d3->setRowAxis(row);
d3->setColumnAxis(col);
最后。要把这个东西显示在窗口上。要加点东西
//容器
QSplitter *sp=new QSplitter(Qt::Horizontal);
sp->addWidget(createWindowContainer(d3));
this->setCentralWidget(sp);
这样就可以了。
//添加数据序列
QBar3DSeries *ser = new QBar3DSeries;
ser->setMesh(QAbstract3DSeries :: MeshCylinder);
ser->setItemLabelFormat("(@rowLabel,@colLabel):$.1f");
d3->addSeries(ser);
//添加数据
QBarDataArray *dataset = new QBarDataArray;
dataset->reserve(row.count());
QBarDataRow drow=new QBarDataRow;
*drow <<1<<2<<3<<4<<5;//加入五行
dataset->append(drow);
ser->dataProxy()->resetArray(dataset);
最后主要是对数据的变化进行动态的变化。