QT----------QT Data Visualzation
实现思路:
- 配置项目:在
.pro文件中添加QT += datavisualization以引入 QT Data Visualization 模块。 - 创建主窗口:使用
QMainWindow作为主窗口,添加Q3DScatter、Q3DBars和Q3DSurface等三维视图组件。 - 初始化和创建三维图表:分别为每种类型的图表(柱状图、散点图、曲面图)创建数据集、系列和轴,并将它们添加到相应的三维视图中。
- 其他功能实现:根据需要添加一些自定义功能,如调整视角、添加数据操作等。
代码示例:
#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();
}
代码解释:
-
三维柱状图:
Q3DBars是三维柱状图的视图组件。QBar3DSeries是柱状图的数据系列,使用QBarDataRow存储数据行。QValue3DAxis用于设置 x、y 和 z 轴的范围和标题。QWidget::createWindowContainer将三维视图组件包装成一个QWidget,以便添加到布局中。
-
三维散点图:
Q3DScatter是三维散点图的视图组件。QScatter3DSeries是散点图的数据系列,使用QScatterDataItem添加数据点。

-
三维曲面图:
Q3DSurface是三维曲面图的视图组件。QSurface3DSeries是曲面图的数据系列,使用QSurfaceDataArray和QSurfaceDataRow存储数据点。- 在示例中,使用
sin(sqrt(x * x + y * y))生成一个简单的曲面形状。
配置 .pro 文件:
确保在 .pro 文件中添加以下内容:
QT += datavisualization widgets
CONFIG += c++11
使用说明:
- 将上述代码保存为一个
.cpp文件,例如main.cpp。 - 创建一个
.pro文件,添加上述配置。 - 编译并运行程序,你将看到一个包含三维柱状图、三维散点图和三维曲面图的主窗口。
其他功能的实现:
- 调整视角:可以使用
bars->scene()->activeCamera()->setCameraPosition等方法调整三维视图的视角。 - 添加交互功能:可以通过重写
Q3DScatter、Q3DBars或Q3DSurface的鼠标事件函数,实现数据点的选择、高亮显示等交互功能。 - 三维地形图:对于三维地形图,可以使用高度图数据替换
QSurface3DSeries的数据,通过读取地理信息系统(GIS)数据或生成地形数据文件来实现。例如,使用QSurfaceDataArray存储地形的高程信息,以x和y表示位置,z表示高度。

相关文章:
QT----------QT Data Visualzation
实现思路: 配置项目:在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口:使用 QMainWindow 作为主窗口,添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…...
什么是Sight Words(信号词)
🧡什么是Sight Words(信号词) 简单来说,Sight Words就是我们在日常英语中常用的一些基本词汇。可以把它想象成是学练英语的“基础词汇”,这些词在各种考试中经常出现,也是在生活中必不可少的。 …...
SpringBoot日志快速集成详解-生产实战
SpringBoot日志快速集成详解 1. 添加依赖2. 创建 logback-spring.xml 配置文件示例 logback-spring.xml 配置: 3. 启用 Spring Boot 自动配置4. 配置 Spring Boot 启动日志级别5. 运行与验证 博文专注于最快速的实战,没有那么多逼逼叨叨的理论࿰…...
路由技术在网络中的作用及特点
作用:路径选择:在复杂的网络拓扑结构中,路由技术能够根据网络的当前状态和目标地址,为数据报文选择一条最佳的传输路径,确保数据能够快速、准确地到达目的地。例如,在互联网中,当用户访问一个网…...
【Python系列】Flask 与 FastAPI:两个 Python Web 框架的对比分析
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
云手机:虚拟技术的革命性应用与实体手机的优劣对比
在近年来,随着互联网的火速发展,云手机作为一种新兴的技术产品,在游戏行业特别是手游市场中掀起了一股热潮。云手机,顾名思义,是架设在ARM虚拟服务器上的手机,其独特的虚拟技术为用户带来了前所未有的使用体…...
3. C语言 数据类型
本章目录: 前言:C语言中的数据类型分类1. 基本数据类型1.1 整数类型1.2 浮点类型1.3 字符型常量1.4 字符串常量 2. 枚举类型3. void 类型void类型的使用示例: 4. 类型转换4.1 隐式类型转换4.2 显式类型转换类型转换的注意事项 5. 小结 前言&a…...
npm install 安装选项 -d -s -g
在使用 npm install 时,-d、-g 和 -s 是不同的选项,它们分别代表不同的安装模式或行为。以下是它们的详细解释: 1. -d:--save-dev 含义:将包安装为开发依赖(devDependencies)。使用场景&#…...
pdf预览兼容问题- chrome浏览器105及一下预览不了
使用的"tato30/vue-pdf": "^1.11.2"预览插件,发现chrome浏览器105及一下预览不了 pdfPreview预览组件: <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...
【可实战】需求分析-测试计划↓-测试设计-测试执行-测试总结↓(包含测试计划、测试总结模板,以公司要求为准)
一、完成软件测试工作的必要步骤 需求分析-测试计划-测试设计-测试执行-测试总结 二、测试计划 (一)测试计划模版 模板在线查看: https://docs.qq.com/doc/DV2hTamxJWnNDaUFF 模板(百度网盘): 链接&…...
MySQL 03 章——基本的SELECT语句
一、SQL概述 (1)SQL背景知识 SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道不同的数据库管理系统生产厂商都支持SQL语句,但都有特有内容 …...
【项目】智能BI洞察引擎 测试报告
目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…...
javaEE-文件操作和IO-文件
目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备: 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式: 6.文件的分类 二、java中文件系统的操作 1.File类中的属性: 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目录,需要我们自己去创建 根目录下创建my.ini,根目录创建data [mysql] default-character-setutf8[mysqld] #端口 po…...
代码模板-C语言常用的errno的名字、值以及对应关系?转换字符串函数?(errno.h, strerror; errno -l; man errno)
背景 errno.h是C 编程语言标准库中的头文件。它定义了使用符号errno (“错误号”的缩写)报告和检索错误情况的宏。经常需要用来在内核态用户态返回错误寻找,本文以供快速检索。 常用函数与用法 strerror 根据errno获取文件 比如ÿ…...
全新免押租赁系统助力商品流通高效安全
内容概要 全新免押租赁系统的推出,可以说是一场商品流通领域的小革命。想象一下,不再为押金烦恼,用户只需通过一个简单的信用评估,就能快速租到所需商品,这种体验简直令人惊喜!这个系统利用代扣支付技术&a…...
5.微服务灰度发布落地实践(rocketmq增强)
文章目录 前言发送端灰度增强订阅端灰度增强 前言 上一篇分析了,在灰度发布实现中为什么要对消息队列灰度发布进行增强。本篇主要介绍如何实现rocketmq 灰度发布的增强. 发送端灰度增强 订阅端灰度增强...
MySql核心面试面试问题解析
MySql核心面试面试问题解析 有时候往往简单的才是最容易失分的!!! MySQL支持哪些存储引擎?有何区别? 答案:常见的存储引擎有InnoDB、MyISAM、Memory等。InnoDB支持事务,MyISAM不支持事务&#x…...
logback之自定义pattern使用的转换器
目录 (1)场景介绍 (2)定义转换器BizCallerConverter (3)logback配置conversionRule (4)测试效果 前文《logback之pattern详解以及源码分析》已经介绍了pattern,以及…...
镜像视界|大模型+空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系
📘 镜像视界|大模型空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系一、时代转折:公安视频系统进入“大模型时代”近年来,以大模型为代表的新一代人…...
Ostrakon-VL-8B对比评测:主流开源多模态模型在餐饮场景的较量
Ostrakon-VL-8B对比评测:主流开源多模态模型在餐饮场景的较量 最近在餐饮和零售行业,用AI来“看懂”图片的需求越来越多了。比如,自动识别菜品、分析菜单、甚至根据顾客拍的模糊照片推荐相似菜品。这背后,多模态模型是关键。 市…...
Token火了,一文读懂词元经济产业链
“词元(Token)是新的大宗商品。”在英伟达2026年度开发者大会(GTC)上,英伟达创始人兼CEO黄仁勋首次提出词元经济。 黄仁勋提出一个公式:收入每瓦词元数可用千兆瓦数。他解释称,数据中心如今已经…...
JavaScript注释的艺术:gh_mirrors/js/js教你写出自解释代码
JavaScript注释的艺术:gh_mirrors/js/js教你写出自解释代码 【免费下载链接】js :art: A JavaScript Quality Guide 项目地址: https://gitcode.com/gh_mirrors/js/js 在JavaScript开发中,注释是代码质量的重要组成部分,但很多开发者误…...
攻克模电难点(一):多级放大电路与差动放大电路实战解析
1. 多级放大电路的设计基础 第一次接触多级放大电路时,我被各种耦合方式绕得头晕。直到在实验室烧坏几个三极管后,才真正理解其中的门道。多级放大电路的核心思想很简单:把多个单级放大电路像搭积木一样连接起来,但实际设计时却要…...
【黑金云课堂笔记】第一~二期FPGA知识点总结
知识卡片一:【FPGA 基础篇】开启硬件编程之门FPGA 的本质: FPGA(现场可编程门阵列)并非在运行软件程序,而是在构建电路本身。用户可以通过 Verilog/VHDL 等硬件描述语言,在芯片出厂后随时重新配置其内部逻辑…...
Load-Use冒险避坑指南:为什么你的RISC流水线转发电路会失效?
Load-Use冒险避坑指南:为什么你的RISC流水线转发电路会失效? 在处理器设计的迷宫中,Load-Use冒险就像是一个精心设计的陷阱,等待着那些过分依赖转发电路的工程师。这种特殊的RAW(Read After Write)冒险场景…...
项目介绍 MATLAB实现基于概率路图法(PRM)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持
MATLAB实现基于概率路图法(PRM)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 随着无人机技术的快速发展&…...
Pixel Epic部署指南:GPU显存监控+自动降级策略+OOM防护机制
Pixel Epic部署指南:GPU显存监控自动降级策略OOM防护机制 1. 像素史诗终端概述 Pixel Epic(像素史诗)是一款基于AgentCPM-Report大模型构建的研究报告辅助终端,将严肃的科研过程转化为富有游戏感的交互体验。与传统AI工具不同&a…...
实战指南:Autofac 依赖注入在微服务架构中的高效应用
1. Autofac在微服务架构中的核心价值 微服务架构最大的挑战之一就是如何优雅地管理数百个服务的依赖关系。我经历过一个电商系统重构项目,当单体应用拆分成30多个微服务后,手工管理服务依赖就像在玩多米诺骨牌——改一个服务参数可能引发连锁反应。这时候…...
