当前位置: 首页 > news >正文

QT----------QT Data Visualzation

实现思路:

  1. 配置项目:在 .pro 文件中添加 QT += datavisualization 以引入 QT Data Visualization 模块。
  2. 创建主窗口:使用 QMainWindow 作为主窗口,添加 Q3DScatterQ3DBarsQ3DSurface 等三维视图组件。
  3. 初始化和创建三维图表:分别为每种类型的图表(柱状图、散点图、曲面图)创建数据集、系列和轴,并将它们添加到相应的三维视图中。
  4. 其他功能实现:根据需要添加一些自定义功能,如调整视角、添加数据操作等。

代码示例:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtDataVisualization/Q3DScatter>
#include <QtDataVisualization/Q3DBars>
#include <QtDataVisualization/Q3DSurface>
#include <QtDataVisualization/QBar3DSeries>
#include <QtDataVisualization/QScatter3DSeries>
#include <QtDataVisualization/QSurface3DSeries>
#include <QtDataVisualization/QValue3DAxis>
#include <QtDataVisualization/QCustom3DItem>
#include <QtCore/QRandomGenerator>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>QT_USE_NAMESPACE
using namespace QtDataVisualization;// 辅助函数:生成随机数
float randomFloat(float min, float max) {return QRandomGenerator::global()->bounded(min, max);
}int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建主窗口QMainWindow mainWindow;QWidget *centralWidget = new QWidget(&mainWindow);mainWindow.setCentralWidget(centralWidget);QVBoxLayout *layout = new QVBoxLayout(centralWidget);// 三维柱状图Q3DBars *bars = new Q3DBars();QBar3DSeries *barSeries = new QBar3DSeries();QBarDataRow *dataRow1 = new QBarDataRow();QBarDataRow *dataRow2 = new QBarDataRow();for (int i = 0; i < 5; ++i) {*dataRow1 << randomFloat(0, 10);*dataRow2 << randomFloat(0, 10);}barSeries->dataProxy()->addRow(dataRow1);barSeries->dataProxy()->addRow(dataRow2);bars->addSeries(barSeries);QValue3DAxis *barAxisX = new QValue3DAxis();barAxisX->setTitle("X Axis");barAxisX->setRange(0, 4);bars->setValueAxisX(barAxisX);QValue3DAxis *barAxisY = new QValue3DAxis();barAxisY->setTitle("Y Axis");barAxisY->setRange(0, 1);bars->setValueAxisY(barAxisY);QValue3DAxis *barAxisZ = new QValue3DAxis();barAxisZ->setTitle("Z Axis");barAxisZ->setRange(0, 10);bars->setValueAxisZ(barAxisZ);QWidget *barsContainer = QWidget::createWindowContainer(bars);layout->addWidget(barsContainer);// 三维散点图Q3DScatter *scatter = new Q3DScatter();QScatter3DSeries *scatterSeries = new QScatter3DSeries();for (int i = 0; i < 100; ++i) {scatterSeries->dataProxy()->addItem(new QScatterDataItem(QVector3D(randomFloat(0, 10), randomFloat(0, 10), randomFloat(0, 10)));}scatter->addSeries(scatterSeries);QValue3DAxis *scatterAxisX = new QValue3DAxis();scatterAxisX->setTitle("X Axis");scatterAxisX->setRange(0, 10);scatter->setValueAxisX(scatterAxisX);QValue3DAxis *scatterAxisY = new QValue3DAxis();scatterAxisY->setTitle("Y Axis");scatterAxisY->setRange(0, 10);scatter->setValueAxisY(scatterAxisY);QValue3DAxis *scatterAxisZ = new QValue3DAxis();scatterAxisZ->setTitle("Z Axis");scatterAxisZ->setRange(0, 10);scatter->setValueAxisZ(scatterAxisZ);QWidget *scatterContainer = QWidget::createWindowContainer(scatter);layout->addWidget(scatterContainer);// 三维曲面图Q3DSurface *surface = new Q3DSurface();QSurface3DSeries *surfaceSeries = new QSurface3DSeries();QSurfaceDataArray *dataArray = new QSurfaceDataArray();int size = 50;for (int i = 0; i < size; ++i) {QSurfaceDataRow *dataRow = new QSurfaceDataRow();for (int j = 0; j < size; ++j) {float x = (float)i / (size - 1) * 10;float y = (float)j / (size - 1) * 10;float z = sin(sqrt(x * x + y * y));*dataRow << QVector3D(x, y, z);}*dataArray << dataRow;}surfaceSeries->dataProxy()->resetArray(dataArray);surface->addSeries(surfaceSeries);QValue3DAxis *surfaceAxisX = new QValue3DAxis();surfaceAxisX->setTitle("X Axis");surfaceAxisX->setRange(0, 10);surface->setValueAxisX(surfaceAxisX);QValue3DAxis *surfaceAxisY = new QValue3DAxis();surfaceAxisY->setTitle("Y Axis");surfaceAxisY->setRange(0, 10);surface->setValueAxisY(surfaceAxisY);QValue3DAxis *surfaceAxisZ = new QValue3DAxis();surfaceAxisZ->setTitle("Z Axis");surface->setValueAxisZ(surfaceAxisZ);QWidget *surfaceContainer = QWidget::createWindowContainer(surface);layout->addWidget(surfaceContainer);mainWindow.show();return a.exec();
}

代码解释:

  1. 三维柱状图

    • Q3DBars 是三维柱状图的视图组件。
    • QBar3DSeries 是柱状图的数据系列,使用 QBarDataRow 存储数据行。
    • QValue3DAxis 用于设置 x、y 和 z 轴的范围和标题。
    • QWidget::createWindowContainer 将三维视图组件包装成一个 QWidget,以便添加到布局中。
  2. 三维散点图

    • Q3DScatter 是三维散点图的视图组件。
    • QScatter3DSeries 是散点图的数据系列,使用 QScatterDataItem 添加数据点。
      在这里插入图片描述
  3. 三维曲面图

    • Q3DSurface 是三维曲面图的视图组件。
    • QSurface3DSeries 是曲面图的数据系列,使用 QSurfaceDataArrayQSurfaceDataRow 存储数据点。
    • 在示例中,使用 sin(sqrt(x * x + y * y)) 生成一个简单的曲面形状。

配置 .pro 文件:

确保在 .pro 文件中添加以下内容:

QT += datavisualization widgets
CONFIG += c++11

使用说明:

  1. 将上述代码保存为一个 .cpp 文件,例如 main.cpp
  2. 创建一个 .pro 文件,添加上述配置。
  3. 编译并运行程序,你将看到一个包含三维柱状图、三维散点图和三维曲面图的主窗口。

其他功能的实现:

  • 调整视角:可以使用 bars->scene()->activeCamera()->setCameraPosition 等方法调整三维视图的视角。
  • 添加交互功能:可以通过重写 Q3DScatterQ3DBarsQ3DSurface 的鼠标事件函数,实现数据点的选择、高亮显示等交互功能。
  • 三维地形图:对于三维地形图,可以使用高度图数据替换 QSurface3DSeries 的数据,通过读取地理信息系统(GIS)数据或生成地形数据文件来实现。例如,使用 QSurfaceDataArray 存储地形的高程信息,以 xy 表示位置,z 表示高度。

在这里插入图片描述

相关文章:

QT----------QT Data Visualzation

实现思路&#xff1a; 配置项目&#xff1a;在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口&#xff1a;使用 QMainWindow 作为主窗口&#xff0c;添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…...

什么是Sight Words(信号词)

&#x1f9e1;什么是Sight Words&#xff08;信号词&#xff09; 简单来说&#xff0c;Sight Words就是我们在日常英语中常用的一些基本词汇。可以把它想象成是学练英语的“基础词汇”&#xff0c;这些词在各种考试中经常出现&#xff0c;也是在生活中必不可少的。 &#x1f…...

SpringBoot日志快速集成详解-生产实战

SpringBoot日志快速集成详解 1. 添加依赖2. 创建 logback-spring.xml 配置文件示例 logback-spring.xml 配置&#xff1a; 3. 启用 Spring Boot 自动配置4. 配置 Spring Boot 启动日志级别5. 运行与验证 博文专注于最快速的实战&#xff0c;没有那么多逼逼叨叨的理论&#xff0…...

路由技术在网络中的作用及特点

作用&#xff1a;路径选择&#xff1a;在复杂的网络拓扑结构中&#xff0c;路由技术能够根据网络的当前状态和目标地址&#xff0c;为数据报文选择一条最佳的传输路径&#xff0c;确保数据能够快速、准确地到达目的地。例如&#xff0c;在互联网中&#xff0c;当用户访问一个网…...

【Python系列】Flask 与 FastAPI:两个 Python Web 框架的对比分析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

云手机:虚拟技术的革命性应用与实体手机的优劣对比

在近年来&#xff0c;随着互联网的火速发展&#xff0c;云手机作为一种新兴的技术产品&#xff0c;在游戏行业特别是手游市场中掀起了一股热潮。云手机&#xff0c;顾名思义&#xff0c;是架设在ARM虚拟服务器上的手机&#xff0c;其独特的虚拟技术为用户带来了前所未有的使用体…...

3. C语言 数据类型

本章目录&#xff1a; 前言&#xff1a;C语言中的数据类型分类1. 基本数据类型1.1 整数类型1.2 浮点类型1.3 字符型常量1.4 字符串常量 2. 枚举类型3. void 类型void类型的使用示例&#xff1a; 4. 类型转换4.1 隐式类型转换4.2 显式类型转换类型转换的注意事项 5. 小结 前言&a…...

npm install 安装选项 -d -s -g

在使用 npm install 时&#xff0c;-d、-g 和 -s 是不同的选项&#xff0c;它们分别代表不同的安装模式或行为。以下是它们的详细解释&#xff1a; 1. -d&#xff1a;--save-dev 含义&#xff1a;将包安装为开发依赖&#xff08;devDependencies&#xff09;。使用场景&#…...

pdf预览兼容问题- chrome浏览器105及一下预览不了

使用的"tato30/vue-pdf": "^1.11.2"预览插件&#xff0c;发现chrome浏览器105及一下预览不了 pdfPreview预览组件&#xff1a; <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...

【可实战】需求分析-测试计划↓-测试设计-测试执行-测试总结↓(包含测试计划、测试总结模板,以公司要求为准)

一、完成软件测试工作的必要步骤 需求分析-测试计划-测试设计-测试执行-测试总结 二、测试计划 &#xff08;一&#xff09;测试计划模版 模板在线查看&#xff1a; https://docs.qq.com/doc/DV2hTamxJWnNDaUFF 模板&#xff08;百度网盘&#xff09;&#xff1a; 链接&…...

MySQL 03 章——基本的SELECT语句

一、SQL概述 &#xff08;1&#xff09;SQL背景知识 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是使用关系模型的数据库应用语言&#xff0c;与数据直接打交道不同的数据库管理系统生产厂商都支持SQL语句&#xff0c;但都有特有内容 …...

【项目】智能BI洞察引擎 测试报告

目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试&#xff08;异步&#xff09;测试用例测试结…...

javaEE-文件操作和IO-文件

目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备&#xff1a; 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式&#xff1a; 6.文件的分类 二、java中文件系统的操作 1.File类中的属性&#xff1a; 2.构造方…...

2025跨年倒计时

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2025年跨年倒计时</title><style>/* 页…...

下载mysql免安装版和配置

1、下载地址 点击去官网下载https://downloads.mysql.com/archives/community/ 2、解压安装mysql 解压的文件夹是没有my.ini文件和data目录&#xff0c;需要我们自己去创建 根目录下创建my.ini&#xff0c;根目录创建data [mysql] default-character-setutf8[mysqld] #端口 po…...

代码模板-C语言常用的errno的名字、值以及对应关系?转换字符串函数?(errno.h, strerror; errno -l; man errno)

背景 errno.h是C 编程语言标准库中的头文件。它定义了使用符号errno &#xff08;“错误号”的缩写&#xff09;报告和检索错误情况的宏。经常需要用来在内核态用户态返回错误寻找&#xff0c;本文以供快速检索。 常用函数与用法 strerror 根据errno获取文件 比如&#xff…...

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出&#xff0c;可以说是一场商品流通领域的小革命。想象一下&#xff0c;不再为押金烦恼&#xff0c;用户只需通过一个简单的信用评估&#xff0c;就能快速租到所需商品&#xff0c;这种体验简直令人惊喜&#xff01;这个系统利用代扣支付技术&a…...

5.微服务灰度发布落地实践(rocketmq增强)

文章目录 前言发送端灰度增强订阅端灰度增强 前言 上一篇分析了&#xff0c;在灰度发布实现中为什么要对消息队列灰度发布进行增强。本篇主要介绍如何实现rocketmq 灰度发布的增强. 发送端灰度增强 订阅端灰度增强...

MySql核心面试面试问题解析

MySql核心面试面试问题解析 有时候往往简单的才是最容易失分的&#xff01;&#xff01;&#xff01; MySQL支持哪些存储引擎&#xff1f;有何区别&#xff1f; 答案&#xff1a;常见的存储引擎有InnoDB、MyISAM、Memory等。InnoDB支持事务&#xff0c;MyISAM不支持事务&#x…...

logback之自定义pattern使用的转换器

目录 &#xff08;1&#xff09;场景介绍 &#xff08;2&#xff09;定义转换器BizCallerConverter &#xff08;3&#xff09;logback配置conversionRule &#xff08;4&#xff09;测试效果 前文《logback之pattern详解以及源码分析》已经介绍了pattern&#xff0c;以及…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...