三维柱状图属性设置

1.预设视角

3种三维图表的父类QAbstract3DGraph有一个函数scene()可以获得图表的场景,是一个Q3DScene类。Q3DScene是三维图的场景,包含一个相机(camera)和一个光源,还提供一个3D主视口(viewport)和两个2D副视角(subviewport),其中次级2D副视口用于显示二维切片图。

场景的相机位置就是我们看图表的视角,当旋转一个图表时,实际上就是相机位置的变换,Qt为相机提供了一些预设的视角,由枚举类型Q3DCamera::CameraPreset定义,它有二十多种取值,其中几种是:

  • Q3DCamera::CameraPresetFrontLow,前下方
  • Q3DCamera::CameraPresetFront,正前方
  • Q3DCamera::CameraPresetFrontHigh,前上方
  • Q3DCamera::CameraPresetLeft,左侧

2.旋转和缩放

Q3DCamera类的setCameraPosition()函数用于设置相机的位置和缩放系数,setCameraPosition()函数原型定义是:

void Q3DCamera::setCameraPosition(float horizontal,float vertical,float zoom=100.0f)

其中,horizontal是水平旋转角度,在-180至180之间取值,所以sliderH的取值范围设置为-180至180;vertical是垂直方向旋转角度,在0至90之间取值,所以sliderV的取值范围设置为-至90;zoom是缩放系数,缺省值为100,表示无缩放,sliderZoom的取值范围设置为10至500,小于100是缩小,大于100是放大

3.主题

与QChart一样,QAbstract3DGraph类可以设置主题,主题定义了图表的各种颜色和外观设置。通过activeTheme()可以获取图表当前设置的主题,通过setActiveTheme()函数可以设置新的主题。

用于三维图表的主题类是Q3DTheme,其type()属性表示主题类型。主题类型是一个枚举类型Q3DTheme::Theme,有多种取值,与QChart的主题的枚举类型的取值相似。

4.选择模式

“选择模式”指的是鼠标在图表上单机时,项被旋转的模式,缺省为旋转一个项。QAbstract3DGraph类的setSelectionMode()函数用于设置旋转模式,选择模式是枚举类型QAbstract3DGraph::SelectionFlag

QAbstract3DGraph::SelectionFlag枚举类型取值
SelectionNone 不允许旋转
SelectionItem 选择并高亮度显示一个项
SelectionRow 选择并高亮度显示一行
SelectionItemAndRow 选择一个项和一行,用不同颜色高亮显示
SelectionColumn 选择并高亮度显示一列
SelectionItemAndColumn 选择一个项和一列,用不同颜色高亮显示
SelectionRowAndColumn 选择交叉的一行和一列
SelectionItemRowAndColumn 选择交叉的一行和一列,用不同颜色高亮显示
SelectionSlice 切片选择,需要SelectionRow或SelectionColumn结合使用
SelectionMultiSeries 选中同一个位置处的多个序列的项

5.序列相关的设置

Q3DBars只能显示QBar3DSeries序列,QBar3DSeries、QScatter3DSeries和QSurface3DSeries都继承自QAbstract3DSeries

序列的设置主要是对其一些显示属性的设置,一个设置函数一般对应一个读取函数,如setBaseColor()用于设置序列基本颜色,对应的读取序列基本颜色的函数是baseColor()。

QAbstract3DSeries类的主要功能函数
void setBaseColor(QColor &color) 设置序列基本颜色
void setBaseGradient(QLinearGradient &gradient) 设置序列渐变色
void setColorStyle(Q3DTheme::ColorStyle style) 设置序列颜色类型
void setMesh(Mesh mesh) 设置棒图项的样式,参数是QAbstract3DSeries::Mesh枚举类型,定义棒图是棱柱、圆柱、圆锥等
void setMeshSmooth(bool enable) 设置棒图是否有光滑效果
void setMeshRotation(QQuaternino &rotation) 设置所有项的选择角度
void setItemLabelVisible(bool visible) 设置项的标签是否可见,若为true,则选中一个项时会显示其标签
void setName(QString &name) 设置序列的名称,标记符合“@seriesName”可用于项的标签格式定义中
void setVisible(bool visible) 设置序列是否可见
void setItemLabelFormat(QString &format) 设置选中项的标签文字格式

棒图样式:

  • QAbstract3DSeries::MeshBar,棱柱
  • QAbstract3DSeries::MeshCylider,圆柱
  • QAbstract3DSeries::MeshSphere,椭圆

setItemLabelFormat()函数设置项的标签显示文字的格式,在格式设置中,可以使用一些标记符号

QBar3DSeries的setItemLabelFormat()函数可以的标记符合
@rowTitle 行坐标轴的标题
@colTitle 列坐标轴的标题
@valueTitle 数值坐标轴的标题
@rowIdx 可见的行索引号
@colIdx 可见的列索引号
@rowLabel 项所在的行坐标的文字标签
@colLabel 项所在的列坐标的文字标签
@valueLabel 项的数值,显示格式与QValue3DAxis::labelFormat相同
@seriesName 序列名称
%<format spec>

指定的数值显示格式,格式规则与QValue3DAxis::labelFormat相同

6.坐标轴反向

如果实际情况需要数值坐标轴反向,可以调用QValue3DAxis::setReverse()函数将坐标轴设置为反向。

7.示例

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QWidget>
#include <QtDataVisualization>
#include <QGridLayout>
#include <QSplitter>QT_BEGIN_NAMESPACE
using namespace QtDataVisualization;
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();Q3DBars *graphBar;QWidget *graphContainer;QBar3DSeries *series;void iniGraph3D();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);iniGraph3D();QSplitter *gridlayout=new QSplitter(Qt::Horizontal);gridlayout->addWidget(graphContainer);this->setCentralWidget(gridlayout);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::iniGraph3D()
{//创建图表graphBar=new Q3DBars;graphContainer=createWindowContainer(graphBar);//创建坐标轴QStringList rowLabs,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);graphBar->setValueAxis(axisV);graphBar->setRowAxis(axisRow);graphBar->setColumnAxis(axisCol);//创建序列series=new QBar3DSeries;series->setMesh(QAbstract3DSeries::MeshCylinder);//棒图形状series->setItemLabelFormat("(@rowLabel,@colLabel):%.1f");//标签格式graphBar->addSeries(series);//添加数据QBarDataArray *dataArray=new QBarDataArray;//数据数组dataArray->reserve(rowLabs.count());QBarDataRow *dataRow1=new QBarDataRow;*dataRow1<<1<<2<<3<<4<<5;//第一行数据有5列QBarDataRow *dataRow2=new QBarDataRow;*dataRow2<<5<<5<<5<<5<<5;//第二行数据有5列QBarDataRow *dataRow3=new QBarDataRow;*dataRow3<<1<<5<<9<<5<<1;//第三行数据有5列dataArray->append(dataRow1);dataArray->append(dataRow2);dataArray->append(dataRow3);series->dataProxy()->resetArray(dataArray);
}

Data Visualization(二)相关推荐

  1. Qt Data Visualization

    Qt Data Visualization  写在前面:  正文:   一 Demo--audiolevels 运行效果:   二 Demo--bars 运行效果:   三 Demo--customi ...

  2. Data Visualization – Banking Case Study Example (Part 1-6)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  3. 现代的数据可视化(Data Visualization)技术

    人视觉....最直接接受信息的一种方式... 或者把数据变的可视 更便于人对数据的认识. ------------------------ 现代的数据可视化(Data Visualization)技术 ...

  4. Qt开发总结(20)——Data Visualization

    上篇介绍了Qt Charts二维图表模块,本篇笔记总结Qt三维图表模块--Data Visualization.同样,在Qt5.7之前之后商业版才有,从Qt5.7开始免费开放在了社区版中.与QtCha ...

  5. Spring Data(二)查询

    Spring Data(二)查询 接着上一篇,我们继续讲解Spring Data查询的策略. 查询的生成 查询的构建机制对于Spring Data的基础是非常有用的.构建的机制将截断前缀find-By ...

  6. OpenCASCADE:Modeling Data之二维几何

    OpenCASCADE:Modeling Data之二维几何 Geom2d包定义了 2dspace 中的几何对象.所有几何实体都经过 STEP 处理.对象通过引用处理. 特别是,Geom2d包提供了以 ...

  7. 如何在data visualization 中update svg_如何操作小程序页面中data数据区中的数据

    前言 在微信小程序中,每一个页面都有一个独立的js文件,用来实现该页面的业务逻辑.这个js文件通常采用Page()方法来对页面进行注册.其中系统为页面设置了一个名为data的区域,用来存储页面的初始数 ...

  8. 基于机器视觉的Data Matrix二维码识别

    基于机器视觉的Data Matrix二维码识别 二维码识别,这个在视觉应用中占有很重要的比例,各种各样的二维码都有可能需要识别.常见的QR码.Data Matrix码.本方案是识别Data Matri ...

  9. 数据可视化(data visualization)—— seaborn

    进入命令行界面(cmd)下载安装,pip install seaborn.seaborn 是作为 matplotlib 的辅助工具才出现的,使其绘制出更为形象化的图形. 官当 doc:Seaborn: ...

  10. Qt三维图表模块 -- Data Visualization 学习记录

    Qt三维图表模块 ----- Data Visualization Qt数据可视化模块提供了一种将三维图形中的数据可视化为条形图.散点图和曲面图的方法.它对于可视化深度图和大量快速变化的数据特别有用, ...

最新文章

  1. Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间...
  2. 进程组 会话 作业
  3. php云和骑士哪家好,PHP云人才系统与骑士cms人才系统对比点评
  4. bzoj4033: [HAOI2015]树上染色(树形dp)
  5. innodb启动失败无法重启的处理方法
  6. 面向对象的三大特性和五大原则
  7. 局域网管理软件精华集成及下载
  8. halcon 纹理检测_halcon学习网
  9. 公司数字化建设规划方案
  10. 仿真技术在控制系统中的应用 ---飞机姿态控制仿真( 俯仰角)
  11. 牛客网在线编程Javascript输入输出
  12. GB2312编码范围
  13. 《捉妖记》的命格解析
  14. 详解 Linux 系统日志分析
  15. Linux下批量ping ip地址
  16. 每天一算法(双色河内塔又叫汉诺塔)
  17. FLAC3D模拟:复杂模型的建立与导入
  18. 专攻国内实体瘤CAR-T细胞疗法,南京卡提医学获数千万元A轮融资
  19. generate详解
  20. 视频加配音用什么软件?视频配音软件大分享

热门文章

  1. 股票接口tradex如何修改?
  2. 华为手机的定价,恐怕连苹果都叹一声服
  3. 【学习笔记】在线双序列比对工具
  4. python求一元二次方程的解法_函数练习_《从零开始学 python》(第二版)
  5. 破壁机复合式刀片研发
  6. 最近我的视频播放浅学总结
  7. 手机芯片测试的软件,小米手机硬件检测软件
  8. windows安装包安装mysql5.7_一步一步的教你在windows下安装MySQL5.7
  9. 阿里巴巴面试常用问题
  10. 《道德经》第二十一章