.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2019-01-10T15:27:17
#
#-------------------------------------------------
QT += core gui
QT +=datavisualization
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = samp10_1
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSplitter>
#include <QCategory3DAxis>
#include <QtDataVisualization>
using namespace QtDataVisualization;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QWidget *graphContainer;//图标的容器
Q3DBars *graph3D;//图表
QBar3DSeries *series;//图标的序列
void iniGraph3D();//绘制图表
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_comboCamera_currentIndexChanged(int index);
void on_sliderH_valueChanged(int value);
void on_sliderV_valueChanged(int value);
void on_sliderZoom_valueChanged(int value);
void on_cBoxTheme_currentIndexChanged(int index);
void on_cBoxBarStyle_currentIndexChanged(int index);
void on_cBoxSelectionMode_currentIndexChanged(int index);
void on_chkBoxBackground_clicked(bool checked);
void on_chkBoxGrid_clicked(bool checked);
void on_chkBoxAxisBackground_clicked(bool checked);
void on_chkBoxItemLabel_clicked(bool checked);
void on_chkBoxSmooth_clicked(bool checked);
void on_chkBoxReverse_clicked(bool checked);
void on_chkBoxReflection_clicked(bool checked);
void on_chkBoxAxisTitle_clicked(bool checked);
void on_spinFontSize_valueChanged(const QString &arg1);
void on_spinFontSize_valueChanged(int arg1);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSplitter>
#include <QCategory3DAxis>
#include <QtDataVisualization>
using namespace QtDataVisualization;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QWidget *graphContainer;//图标的容器
Q3DBars *graph3D;//图表
QBar3DSeries *series;//图标的序列
void iniGraph3D();//绘制图表
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_comboCamera_currentIndexChanged(int index);
void on_sliderH_valueChanged(int value);
void on_sliderV_valueChanged(int value);
void on_sliderZoom_valueChanged(int value);
void on_cBoxTheme_currentIndexChanged(int index);
void on_cBoxBarStyle_currentIndexChanged(int index);
void on_cBoxSelectionMode_currentIndexChanged(int index);
void on_chkBoxBackground_clicked(bool checked);
void on_chkBoxGrid_clicked(bool checked);
void on_chkBoxAxisBackground_clicked(bool checked);
void on_chkBoxItemLabel_clicked(bool checked);
void on_chkBoxSmooth_clicked(bool checked);
void on_chkBoxReverse_clicked(bool checked);
void on_chkBoxReflection_clicked(bool checked);
void on_chkBoxAxisTitle_clicked(bool checked);
void on_spinFontSize_valueChanged(const QString &arg1);
void on_spinFontSize_valueChanged(int arg1);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
iniGraph3D();
QSplitter *splitter =new QSplitter(Qt::Horizontal);
splitter->addWidget(ui->groupBox);
splitter->addWidget(graphContainer);
this->setCentralWidget(splitter);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::iniGraph3D()
{
//创建图表
graph3D =new Q3DBars();
graphContainer=QWidget::createWindowContainer(graph3D);
//创建坐标轴
QStringList rowLabs;
QStringList colLabs;
rowLabs<<"row1"<<"row2"<<"row3";
colLabs<<"col1"<<"col2"<<"col3"<<"col4"<<"col5";
QValue3DAxis *axisV=new QValue3DAxis;
axisV->setTitle("value");
axisV->setTitleVisible(true);
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);
//将坐标轴添加到图像
graph3D->setRowAxis(axisRow);
graph3D->setValueAxis(axisV);
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 *dataRow=new QBarDataRow;
*dataRow<<1<<2<<3<<4<<5;
dataSet->append(dataRow);
QBarDataRow *dataRow2=new QBarDataRow;
*dataRow2<<5<<5<<5<<5<<5;
dataSet->append(dataRow2);
QBarDataRow *dataRow3=new QBarDataRow;
*dataRow3<<1<<5<<9<<5<<1;
dataSet->append(dataRow3);
//为序列的数据代理设置数据
series->dataProxy()->resetArray(dataSet);
}
/**
* @brief MainWindow::on_comboCamera_currentIndexChanged
* @param index
*/
void MainWindow::on_comboCamera_currentIndexChanged(int index)
{
//变换视角
Q3DCamera::CameraPreset cameraPos=Q3DCamera::CameraPreset(index);//将序号转换成Q3DCamera::CameraPreset类型
graph3D->scene()->activeCamera()//获取当前图标视角
->setCameraPreset(cameraPos);//设置视角
}
void MainWindow::on_sliderH_valueChanged(int value)
{
Q_UNUSED(value);
int xRot=ui->sliderH->value();
//int yRot=ui->sliderV->value();
//int zoom=ui->sliderZoom->value();
graph3D->scene()->activeCamera()->setXRotation(xRot);
//graph3D->scene()->activeCamera()->setYRotation(yRot);
//graph3D->scene()->activeCamera()->setZoomLevel(zoom);
}
void MainWindow::on_sliderV_valueChanged(int value)
{
Q_UNUSED(value);
int yRot=ui->sliderV->value();
graph3D->scene()->activeCamera()->setYRotation(yRot);
}
void MainWindow::on_sliderZoom_valueChanged(int value)
{
Q_UNUSED(value);
int zoom=ui->sliderZoom->value();
graph3D->scene()->activeCamera()->setZoomLevel(zoom);
}
//修改主题
void MainWindow::on_cBoxTheme_currentIndexChanged(int index)
{
Q3DTheme *currentTheme=graph3D->activeTheme();
currentTheme->setType(Q3DTheme::Theme(index));
}
//修改棒图样式
void MainWindow::on_cBoxBarStyle_currentIndexChanged(int index)
{
QAbstract3DSeries::Mesh aMesh;
aMesh=QAbstract3DSeries::Mesh(index+1);
series->setMesh(aMesh);
}
//修改选择模式
void MainWindow::on_cBoxSelectionMode_currentIndexChanged(int index)
{
graph3D->setSelectionMode(QAbstract3DGraph::SelectionFlags(index));
}
//背景可见
void MainWindow::on_chkBoxBackground_clicked(bool checked)
{
graph3D->activeTheme()->setBackgroundEnabled(checked);
}
//背景网络
void MainWindow::on_chkBoxGrid_clicked(bool checked)
{
graph3D->activeTheme()->setGridEnabled(checked);
}
//坐标轴标签背景可见
void MainWindow::on_chkBoxAxisBackground_clicked(bool checked)
{
graph3D->activeTheme()->setLabelBackgroundEnabled(checked);
}
//项的标签可见
void MainWindow::on_chkBoxItemLabel_clicked(bool checked)
{
series->setItemLabelFormat("value at (@rowLabel,@colLabel):%.1f");
series->setItemLabelVisible(checked);
}
//光滑
void MainWindow::on_chkBoxSmooth_clicked(bool checked)
{
series->setMeshSmooth(checked);
}
//数值轴反转
void MainWindow::on_chkBoxReverse_clicked(bool checked)
{
graph3D->valueAxis()->setReversed(checked);
}
//设置倒影
void MainWindow::on_chkBoxReflection_clicked(bool checked)
{
graph3D->setReflection(checked);
}
//标签可见
void MainWindow::on_chkBoxAxisTitle_clicked(bool checked)
{
graph3D->rowAxis()->setTitleVisible(checked);
graph3D->columnAxis()->setTitleVisible(checked);
graph3D->valueAxis()->setTitleVisible(checked);
}
void MainWindow::on_spinFontSize_valueChanged(const QString &arg1)
{
}
//设置字体大小
void MainWindow::on_spinFontSize_valueChanged(int arg1)
{
QFont font=graph3D->activeTheme()->font();
font.setPointSize(arg1);
graph3D->activeTheme()->setFont(font);
}
运行结果