1.添加所需库
1.1在.pro中添加datavisualization类
1.2在widget.h中添加声明函数
QWidget *graphContainer;//图表的容器
Q3DBars *graph3D; //图表
QBar3DSeries *series; //序列
2.添加ui
添加一个布局用于存放图形
3.编写代码
3.1图像的初始化设置
void Widget::iniGraph3D()
{
//创建3位图表
graph3D = new Q3DBars();
graphContainer = QWidget::createWindowContainer(graph3D);
graph3D->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetBehindHigh);
//三维坐标轴
QValue3DAxis* axisV = new QValue3DAxis;
axisV->setTitle("value");
axisV->setTitleVisible(true);
QStringList rowLabs;
QStringList colLabs;
rowLabs << "row1" << "row2" << "row3";
colLabs << "col1" << "col2" << "col3" << "col4" << "col5";
QCategory3DAxis* axisRow = new QCategory3DAxis;
axisRow->setTitle("row axis");
axisRow->setLabels(rowLabs);
axisRow->setTitleVisible(true);
QCategory3DAxis* axisCol = new QCategory3DAxis;
axisCol->setTitle("col axis");
axisCol->setLabels(colLabs);
axisCol->setTitleVisible(true);
//坐标轴添加到3D图表
graph3D->setValueAxis(axisV);
graph3D->setRowAxis(axisRow);
graph3D->setColumnAxis(axisCol);
//创建序列
series = new QBar3DSeries;
series->setMesh(QAbstract3DSeries::MeshCylinder);
series->setItemLabelFormat("(@rowLabel,@colLabel):%.1f");
graph3D->addSeries(series);
//数据集,每一项都是一行
QBarDataArray* dataSet = new QBarDataArray;
dataSet->reserve(rowLabs.count());
QBarDataRow *dataRow1 = new QBarDataRow;
*dataRow1 << 1 << 2<< 3<< 4<<5; //第1行数据,有5列
dataSet->append(dataRow1);
QBarDataRow *dataRow2 = new QBarDataRow;
*dataRow2 << 5<< 5<< 5<< 5<<5; //第2行数据,有5列
dataSet->append(dataRow2);
QBarDataRow *dataRow3 = new QBarDataRow;
*dataRow3 << 1<< 5<< 9<< 5<<1; //第2行数据,有5列
dataSet->append(dataRow3);
series->dataProxy()->resetArray(dataSet);
graph3D->show();
}
3.2图像显示
//代码创建
//QGridLayout * layout = new QGridLayout;
//layout->addWidget(graphContainer);
//setLayout(layout);
ui->gridLayout->addWidget(graphContainer);
3.3整体代码
Widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
iniGraph3D();
//代码创建
//QGridLayout * layout = new QGridLayout;
//layout->addWidget(graphContainer);
//setLayout(layout);
ui->gridLayout->addWidget(graphContainer);
}
Widget::~Widget()
{
delete ui;
}
void Widget::iniGraph3D()
{
//创建3位图表
graph3D = new Q3DBars();
graphContainer = QWidget::createWindowContainer(graph3D);
graph3D->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetBehindHigh);
//三维坐标轴
QValue3DAxis* axisV = new QValue3DAxis;
axisV->setTitle("value");
axisV->setTitleVisible(true);
QStringList rowLabs;
QStringList colLabs;
rowLabs << "row1" << "row2" << "row3";
colLabs << "col1" << "col2" << "col3" << "col4" << "col5";
QCategory3DAxis* axisRow = new QCategory3DAxis;
axisRow->setTitle("row axis");
axisRow->setLabels(rowLabs);
axisRow->setTitleVisible(true);
QCategory3DAxis* axisCol = new QCategory3DAxis;
axisCol->setTitle("col axis");
axisCol->setLabels(colLabs);
axisCol->setTitleVisible(true);
//坐标轴添加到3D图表
graph3D->setValueAxis(axisV);
graph3D->setRowAxis(axisRow);
graph3D->setColumnAxis(axisCol);
//创建序列
series = new QBar3DSeries;
series->setMesh(QAbstract3DSeries::MeshCylinder);
series->setItemLabelFormat("(@rowLabel,@colLabel):%.1f");
graph3D->addSeries(series);
//数据集,每一项都是一行
QBarDataArray* dataSet = new QBarDataArray;
dataSet->reserve(rowLabs.count());
QBarDataRow *dataRow1 = new QBarDataRow;
*dataRow1 << 1 << 2<< 3<< 4<<5; //第1行数据,有5列
dataSet->append(dataRow1);
QBarDataRow *dataRow2 = new QBarDataRow;
*dataRow2 << 5<< 5<< 5<< 5<<5; //第2行数据,有5列
dataSet->append(dataRow2);
QBarDataRow *dataRow3 = new QBarDataRow;
*dataRow3 << 1<< 5<< 9<< 5<<1; //第2行数据,有5列
dataSet->append(dataRow3);
series->dataProxy()->resetArray(dataSet);
graph3D->show();
}