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


运行结果
QT数据三维显示

相关文章: