简介

本文将介绍支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家。本文将创建一个含有三个序列的三维散点图,同时设定了坐标轴的标题和标签,使得用户点击表示三维散点的球体时,可以显示出该点的一些信息。

正文

QT三维散点图数据类型

Q3DScatter

QT数据可视化框架整体上就是支持基于OpenGL的GPU图形硬件加速的性能优化功能,QT三维散点图也是支持GPU硬件加速的。

QT数据可视化框架中的三维散点图类型是Q3DScatter类型。这个类型也是从抽象图类型QAbstract3DGraph派生而来的,因此与Q3DBars类型一样,Q3DScatter类型也是一个QWindow窗口类型。

QT三维散点图也有三个坐标轴axisX,axisY,axisZ。只是跟QT三维柱状图不同,QT三维散点图的每一个坐标轴都是数值类型的坐标轴,也就是QValue3DAxis类型。


axisX : QValue3DAxis*
axisY : QValue3DAxis*
axisZ : QValue3DAxis* Q3DScatter类型提供了以下共有函数来实现三维散点图的维护管理。 ```cpp
//构造函数
QScatter3DSeries(QObject *parent = nullptr)
QScatter3DSeries(QScatterDataProxy *dataProxy, QObject *parent = nullptr)
//析构函数
virtual ~QScatter3DSeries() //获取和设置散点图数据代理对象的指针
QScatterDataProxy *dataProxy() const
void setDataProxy(QScatterDataProxy *proxy) //获取和设置点的大小,也就是表示点的球体的大小
//点的大小是一个相对数值。
//取值范围:[0.0, 1.0],默认0.0。
float itemSize() const
void setItemSize(float size) //获取和设置选中的条目(数据点,球体)的序号
//一个序列中可以有N个数据点
int selectedItem() const
void setSelectedItem(int index)

# QScatter3DSeries QT三维散点图的序列类型QScatter3DSeries类型,也是从抽象三维序列类型QAbstract3DSeries派生而来的,这个跟QT三维柱状图相似。 具体添加序列上的数据时,QT三维散点图的序列使用的类型是通过QT散点数据代理类型QScatterDataProxy来维护管理的。具体来讲就是通过QScatterDataItem来添加一个三维点,实际表现为一个三维球体;或者通过QScatterDataArray来添加一组三位点,实际表现为一系列三维球体。
QScatterDataProxy类型提供了以下共有函数来实现数据点的维护管理。 ```cpp //构造函数和析构函数
QScatterDataProxy(QObject *parent = nullptr)
virtual ~QScatterDataProxy() //添加一个或多个数据点(球体)
int addItem(const QScatterDataItem &item)
int addItems(const QScatterDataArray &items)
void insertItem(int index, const QScatterDataItem &item)
void insertItems(int index, const QScatterDataArray &items) //设置指定序号的数据点
void setItem(int index, const QScatterDataItem &item)
void setItems(int index, const QScatterDataArray &items) //获取序列中的一组数据点或者一个数据点
const QScatterDataArray *array() const
const QScatterDataItem *itemAt(int index) const //获取数据点的数量
int itemCount() const //删除指定序号的数据点
void removeItems(int index, int removeCount)
void resetArray(QScatterDataArray *newArray) //获取这个代理对象对应的序列对象的指针
QScatter3DSeries *series() const

QT三维散点图运行效果

这个三维散点图应用实例运行效果截图如下所示。

本文对应的视频演示如下所示:

支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通

视频链接如下所示:

支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通

QT三维散点图应用实例源码

这个三维散点图应用实例的源码如下所示:

//补天云QT免费课程 面试必备界面美化 性能优化 原理源码。
#include "butianyunwidget.h"
#include <Q3DScatter>
#include <QScatter3DSeries>
#include <QVBoxLayout>
#include <QPushButton> ButianyunWidget::ButianyunWidget(QWidget *parent)
: QWidget(parent)
{
//垂直布局
QVBoxLayout* main_layout = new QVBoxLayout();
setLayout(main_layout); //按钮控件
QPushButton* button_a = new QPushButton(QStringLiteral("补天云QT系列视频课程"));
main_layout->addWidget(button_a); //QT数据可视化框架的三维散点图
Q3DScatter* scatter = new Q3DScatter(nullptr);
scatter->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
scatter->setFlags(scatter->flags() | Qt::FramelessWindowHint); //X轴的标题
scatter->axisX()->setRange(0, 100);
scatter->axisX()->setTitleVisible(true);
scatter->axisX()->setTitle(QStringLiteral("X轴"));
scatter->axisX()->setLabelFormat(QStringLiteral("%.0f 公里")); //Z轴的标题
scatter->axisZ()->setRange(0, 100);
scatter->axisZ()->setTitleVisible(true);
scatter->axisZ()->setTitle(QStringLiteral("Z轴"));
scatter->axisZ()->setLabelFormat(QStringLiteral("%.0f 公里")); //Y轴(高)的标题
scatter->axisY()->setRange(0, 100);
scatter->axisY()->setTitleVisible(true);
scatter->axisY()->setTitle(QStringLiteral("Y轴"));
scatter->axisY()->setLabelFormat(QStringLiteral("%.0f 公里")); //三个序列的颜色
const QColor colors[] = {QColor(255, 0, 0), QColor(0, 255, 0), QColor(0, 0, 255)};
//三个序列的名称
const QString names[] = {QStringLiteral("2021年"), QStringLiteral("2022年"), QStringLiteral("2023年")};
//依次创建三个序列并加入到三维散点图中
for (int i = 0; i < 3; i++)
{
QScatter3DSeries* series = new QScatter3DSeries();
series->setName(names[i]);
series->setBaseColor(colors[i]);
series->setItemLabelFormat((QStringLiteral("@seriesName (@xLabel, @zLabel) => @yLabel)")));
QScatterDataArray data;
data << QVector3D(10 + i * 10, 10 + i * 20, 10 + i * 30)
<< QVector3D(20 + i * 30, 20 + i * 20, 20 + i * 10)
<< QVector3D(30 + i * 10, 30 + i * 10, 30 + i * 10);
series->dataProxy()->addItems(data);
scatter->addSeries(series);
} //创建一个包含三维散点图的QT窗口
QWidget* scatter_widget = QWidget::createWindowContainer(scatter);
main_layout->addWidget(scatter_widget); //按钮控件
QPushButton* button_b = new QPushButton(QStringLiteral("补天云QT技术培训专家"));
main_layout->addWidget(button_b);
}

总结

本文介绍了支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家。本文介绍的应用实例中创建了一个含有三个序列的三维散点图,同时设定了坐标轴的标题和标签,使得用户点击表示三维散点的球体时,可以显示出zh该点的一些信息。

QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家的更多相关文章

  1. D3js初探及数据可视化案例设计实战

    摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法.过程和结果,起抛砖引玉之效.在技术方案上,我们采用通用web架构和d3js作为主要技术手段:考虑到项目需求,这里所做的可视化 ...

  2. 大数据学习day20-----spark03-----RDD编程实战案例(1 计算订单分类成交金额,2 将订单信息关联分类信息,并将这些数据存入Hbase中,3 使用Spark读取日志文件,根据Ip地址,查询地址对应的位置信息

    1 RDD编程实战案例一 数据样例 字段说明: 其中cid中1代表手机,2代表家具,3代表服装 1.1 计算订单分类成交金额 需求:在给定的订单数据,根据订单的分类ID进行聚合,然后管理订单分类名称, ...

  3. Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例

    ​  目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...

  4. 数据可视化实例(三): 散点图(pandas,matplotlib,numpy)

    关联 (Correlation) 关联图表用于可视化2个或更多变量之间的关系. 也就是说,一个变量如何相对于另一个变化. 散点图(Scatter plot) 散点图是用于研究两个变量之间关系的经典的和 ...

  5. 【逆向&编程实战】Metasploit安卓载荷运行流程分析_复现meterpreter模块接管shell

    /QQ:3496925334 作者:MG193.7 CNBLOG博客号:ALDYS4 未经许可,禁止转载/ 关于metasploit的安卓模块,前几次的博客我已经写了相应的分析和工具 [Android ...

  6. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  7. 【Java编程实战】Metasploit_Java后门运行原理分析以及实现源码级免杀与JRE精简化

    QQ:3496925334 文章作者:MG1937 CNBLOG博客ID:ALDYS4 未经许可,禁止转载 某日午睡,迷迷糊糊梦到Metasploit里有个Java平台的远控载荷,梦醒后,打开虚拟机, ...

  8. 前端数据可视化echarts.js使用指南

    一.开篇 首先这里要感谢一下我的公司,因为公司需求上面的新颖(奇葩)的需求,让我有幸可以学习到一些好玩有趣的前端技术,前端技术中好玩而且比较实用的我想应该要数前端的数据可视化这一方面,目前市面上的数据 ...

  9. 使用bokeh-scala进行数据可视化

    目录 前言 bokeh简介及胡扯 bokeh-scala基本代码 我的封装 总结 一.前言        最近在使用spark集群以及geotrellis框架(相关文章见http://www.cnbl ...

  10. 前端数据可视化echarts.js

    一.echarts.js的优势与总体情况 echarts.js作为国内的IT三巨头之一的百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点 1.容易使用 echarts.js的官方文档比 ...

随机推荐

  1. [oeasy]python0105_七段数码管_7_SEGMENT_数码管驱动_4511

    七位数码管 回忆上次内容 上次回顾了 指示灯 辉光管   并了解了 驱动(driver) 驱动 就是 控制设备 工作的人(模块)     辉光管离我们的生活很远了 ​   添加图片注释,不超过 140 ...

  2. oeasy教您玩转 linux 010213 中文 fcitx

     我们来回顾一下 上一部分我们都讲了什么? 管道 ls | cowsay 管道的符号是| 管道的作用是连接 原来应该输出到屏幕的内容 通过管道流到了另一个命令做为参数 这次是否可以让cow说出一些中文 ...

  3. Docker Compose在Centos下的安装与卸载

    实践环境 Centos7.8 先决条件 已安装Docker Engine 安装Docker Compose 运行以下命令下载稳定版本Docker Compose $ sudo curl -L &quo ...

  4. windows terminal 添加git bash

    打开windows terminal点击设置 修改文件 找到profiles-->list添加一个节点 { "commandline": "C:\\Program ...

  5. 安全可信,Solon v2.8.6 发布

    Solon 框架! Java "纯血国产"应用开发框架.开放原子开源基金会,孵化项目.从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态. 追求: 更快.更小.更 ...

  6. 13、SpringMVC之异常解析器

    13.1.环境搭建 创建名为spring_mvc_exception的新module,过程参考9.1节和9.5节 13.1.1.创建错误提示页 <!DOCTYPE html> <ht ...

  7. 【Git】介绍与概述

    版本控制工具应该具备的功能? 协同修改 多人并行不悖的修改服务器端的同一个文件. 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态. 版本管理 在保存每一个版本的文件信息的时候 ...

  8. 人形机器人(humanoid)(双足机器人、四足机器人) —— 硬件测试的方法

    硬件测试的方法: 硬件的稳定性.鲁棒性.为机器人设定好固有的执行策略,然后长时间的让机器人重复执行这些既定好的动作.该种测试方法主要测试硬件的设计是否合理,硬件在长时间的运行中是否可以稳定运行而不是出 ...

  9. jax框架的官方编译版本 —— 预编译发行版本(release 列表)

    jax框架的Google官方给出的预编译版本,支持CUDA和CUDNN的,带有python版本号,CUDA版本号,CUDNN版本号的: https://storage.googleapis.com/j ...

  10. 由于美国的制程限制,假如我国的同等性能的AI芯片5年内无法实现量产化我们应该如何发展我们的AI领域的基础设施呢?

    相关: 美晶片禁令面難題!封過頭反把市場送中國? 今年华为公司推出了mate pro60手机,可以说我们可以实现7nm芯片的制造了,但是要注意,我们在实现7nm芯片制造的时候使用的应该依旧是被美国限制 ...