当前位置: 首页 > 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;以及…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

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

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

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...