【无标题】

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();
}

4.结果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值