完整教程:【QT】-怎么实现瀑布图
为什么 QCustomPlot 是最科学的选择?
一、QCustomPlot 实现瀑布图步骤(附代码)
步骤 1:下载并集成 QCustomPlot
官网下载:https://www.qcustomplot.com/
将 qcustomplot.h 和 qcustomplot.cpp 加入你的项目
在 .pro 文件中添加:
QT += widgets printsupport
HEADERS += qcustomplot.h
SOURCES += qcustomplot.cpp
步骤 2:创建瀑布图核心代码
#include "qcustomplot.h"
// 假设你有一个二维数据:data[time][frequency] = amplitude
QVector<QVector<
double>> waterfallData;
// 你的瀑布图数据
void setupWaterfallPlot(QCustomPlot *customPlot)
{
// 1. 创建 ColorMap(瀑布图本质是颜色映射图)
QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis, customPlot->yAxis);
customPlot->
addPlottable(colorMap);
// 2. 填充数据
int timePoints = waterfallData.size();
// 时间点数量
int freqPoints = waterfallData[0].size();
// 频率点数量
colorMap->
data()->
setSize(timePoints, freqPoints);
colorMap->
data()->
setRange(QCPRange(0, timePoints-1), QCPRange(0, freqPoints-1));
for (int t = 0; t < timePoints;
++t) {
for (int f = 0; f < freqPoints;
++f) {
colorMap->
data()->
setCell(t, f, waterfallData[t][f]);
}
}
// 3. 设置颜色渐变(如:蓝-绿-红)
QCPColorGradient gradient;
gradient.setColorStopAt(0, QColor(0, 0, 255));
// 蓝色(低能量)
gradient.setColorStopAt(0.5, QColor(0, 255, 0));
// 绿色(中能量)
gradient.setColorStopAt(1, QColor(255, 0, 0));
// 红色(高能量)
colorMap->
setGradient(gradient);
// 4. 设置坐标轴标签
customPlot->xAxis->
setLabel("Time (s)");
customPlot->yAxis->
setLabel("Frequency (Hz)");
// 5. 刷新显示
customPlot->
rescaleAxes();
customPlot->
replot();
}
步骤 3:实时更新瀑布图(如频谱分析)
// 每次获取新数据时调用
void updateWaterfall(QCustomPlot *customPlot, const QVector<
double>
&newSpectrum)
{
QCPColorMap *colorMap = qobject_cast<QCPColorMap*>(customPlot->plottable(0));if (!colorMap) return;int timePoints = colorMap->data()->keySize();int freqPoints = colorMap->data()->valueSize();// 数据滚动:旧数据前移,新数据插入最后一行for (int t = 0; t < timePoints - 1;++t) {for (int f = 0; f < freqPoints;++f) {double val = colorMap->data()->cell(t+1, f);colorMap->data()->setCell(t, f, val);}}// 插入新频谱数据for (int f = 0; f < freqPoints;++f) {colorMap->data()->setCell(timePoints-1, f, newSpectrum[f]);}customPlot->replot();}
效果预览
你的瀑布图将显示为:
频率 (Hz)
^
| 红色(高能量)
| 绿色(中能量)
| 蓝色(低能量)
±---------------> 时间 (s)
X轴:时间(或帧号)
Y轴:频率(或通道)
颜色:能量强度(通过 QCPColorGradient 自定义)
二、为什么不用 Qt Charts?
Qt Charts 的 QLineSeries + QAreaSeries 可以模拟瀑布图,但:
❌ 无原生支持 → 需手动绘制数百条曲线
❌ 性能差 → 大数据量卡顿
❌ 颜色映射难 → 需为每条曲线单独设色
❌ 无滚动优化 → 实时更新效率低
Qt Charts 适合:柱状图、折线图、饼图等基础图表,不适合科学/工程级瀑布图。
三、高级优化技巧(QCustomPlot)
- 提升性能(大数据量)
colorMap->setInterpolate(false); // 关闭插值,提升速度
colorMap->setDataRange(QCPRange(0, 100)); // 固定数据范围,避免重计算 - 添加颜色标尺(Legend)
cpp
QCPColorScale *colorScale = new QCPColorScale(customPlot);
customPlot->plotLayout()->addElement(0, 1, colorScale); // 右侧添加标尺
colorMap->setColorScale(colorScale);
colorScale->axis()->setLabel(“Amplitude (dB)”); - 支持鼠标交互(缩放/拖拽)
cpp
customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
四、行业应用案例
音频分析:实时频谱瀑布图(如 Audacity)
通信系统:信道频率响应随时间变化
雷达/声呐:目标回波强度-距离-时间图
医疗设备:脑电图(EEG)时频分析
✅ 五、总结:最科学方案
Qt 瀑布图 = QCustomPlot + QCPColorMap + 数据滚动更新
优势:
✅ 10行代码快速出图
✅ 支持实时大数据(>10万点)
✅ 原生颜色映射 + 标尺
✅ 开源免费(GPL/商业许可可选)
✅ 活跃社区(GitHub 5k+ stars)
学习资源:
官网:https://www.qcustomplot.com/
GitHub:https://github.com/DerManu/QCustomPlot
示例:下载包中的 colorMapDemo 和 realtimeDataDemo
相关文章:
完整教程:【QT】-怎么实现瀑布图
完整教程:【QT】-怎么实现瀑布图pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fo…...
【初赛】二叉树性质和遍历 - Slayer
二叉树的性质与遍历 一、二叉树的基本性质 1. 定义 二叉树是每个节点最多有两个子树的树结构,子树分为左子树和右子树,具有顺序性 2. 关键性质性质1:在非空二叉树中,第 \(i\) 层最多有 \(2^{i-1}个\)节点 性质2:深度为k的二叉树最多有 \(2^k - 1\) 个节点 性质3:对任何一…...
详细解析苹果iOS应用上架到App Store的完整步骤与指南
本指南全面讲解了将iOS应用提交到苹果App Store的整个流程,从注册开发者账号开始,到创建App ID和证书、配置应用元数据、打包IPA文件、上传至App Store Connect、进行TestFlight测试、提交审核以及最终发布。每个步骤都提供了详细说明,旨在帮助开发者避免常见错误,高效完成…...
drawio
目录常见问题如何实现一个矩形里添加一个子矩形,拖动时作为整体 常见问题 如何实现一个矩形里添加一个子矩形,拖动时作为整体选中父矩形,快捷键:ctrl + g;...
bootstrap-select插件在webpack中点击无响应
使用插件:https://github.com/snapappointments/bootstrap-select问题:bootstrap-select插件在webpack中点击无响应解决方案: 1、在入口文件中按顺序引入css和js import bootstrap/dist/css/bootstrap.min.css import "bootstrap-select/dist/css/bootstrap-select.…...
Kali 字体大小设置
Kali 字体大小设置 终端字体颜色调整 调整前调整后在session -> 参数配置终端颜色这里可以改自己喜欢的终端颜色在字体这里可以修改字体大小和字体可以选择图片改终端的背景显示和分辨率 在左上角这里选择全部应用程序 选择显示可以修改kali的分辨率和刷新率桌面图标样式和终…...
如何使用 OCR 提取扫描件 PDF 的文本(Python 实现) - E
从 PDF 中提取文本一直是很多人的需求。市面上的工具虽然能处理大部分数字 PDF,但遇到扫描件 PDF 时往往无能为力,想要直接复制或获取其中的文字并不容易。其实这个问题并不是没有解法 —— 本文将带你了解如何借助 Python + OCR 技术,从扫描 PDF 中提取可编辑文本。 为什么…...
重复从网页复制文字到编辑器的Autohotkey自动化代码
为了下某本小说,用feiyuetools录了一段ahk v1的代码,经过阅读与删改之后,得到了以下代码,备忘一下。 原来记录的脚本有很多垃圾代码,必须手工整理与清洁。好在弄好之后,还是很好用的,稳定性不错。 操作:用chrome打开某网站页面,打开notepad4.exe, 开始记录脚本,修改…...
WeakMap 应用场景与示例
WeakMap 是 JavaScript 中一种非常有用的数据结构,它通过弱引用机制来帮助管理内存,防止内存泄漏。简单来说,当你用一个对象作为 WeakMap 的键时,WeakMap 不会阻止这个对象被垃圾回收器回收。一旦这个对象在其他地方没有被引用了,它以及它在 WeakMap 中对应的值就会被自动…...
node,nvm,nrm,npm扫盲
Node相关Node >> 指 Node.js ,Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起…...
使用 conda 懒加载的方式减少 PowerShell 的启动时间
使用 scoop 安装的 miniconda3,在 PowerShell 中进行了 conda init 初始化(注意:不是 Windows PowerShell,见下图,PowerShell 是在 Microsoft Store 中安装的,link)问题:启动速度太慢,大概需要 4 秒 于是进行优化,原理:不要在 profile 里直接运行 conda 的 heavy ho…...
深入 Spring MVC 底层:从 DispatcherServlet 到自定义组件的全链路解析 - 实践
深入 Spring MVC 底层:从 DispatcherServlet 到自定义组件的全链路解析 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...
podman 替代docker
podman machine init podman machine start podman machine stop podman machine set --rootless podman machine start--- 她说, 她是仙,她不是神...
202404_古剑山杯_数独
拼图,gapsTags:拼图,gaps 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202404_古剑山杯_数独.zip 0x01. WP 01.解压缩后发现一个image.png类似拼图02.使用工具gaps进行自动拼图 gaps run image.png output.…...
m1芯片装windows系统使用感受
m1芯片装Windows系统使用感受 随着技术的不断进步,苹果公司在其Mac系列电脑中引入了自家设计的M1芯片。这款芯片不仅在性能上有着显著的提升,同时也带来了能效比上的巨大飞跃。然而,对于一些用户来说,macOS可能无法满足他们的所有需求,特别是那些需要运行特定Windows应用程…...
mac book怎么切换windows系统
如何在MacBook上安装并切换Windows系统 一、引言 随着科技的发展和个人需求的多样化,许多人可能会遇到需要在苹果公司的MacBook上运行Windows操作系统的情况。这可能是因为某些特定的应用程序或游戏只能在Windows环境下运行,或者用户希望体验不同操作系统的特色。本篇文章将详…...
硬件内在函数
AVX-512支持:SIMD的终极形态AVX-512支持:SIMD的终极形态// 优化的数值计算// 优化前的代码 public double[] ProcessData(double[] input) {var result = new double[input.Length];for (int i = 0; i < input.Length; i++){result[i] = Math.Sin(input[i]) * Math.Cos(in…...
202205_宁波市赛_DocDocDoc
DOCX,PNG高度隐写,凯撒密码Tags:DOCX,PNG高度隐写,凯撒密码 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202205_第五届市赛_DocDocDoc.zip 0x01. WP解压文件后的到一docx文件,查看内容无明显信息将扩展名…...
DP题
1.区间dp--精妙状态设计与转移 https://codeforces.com/contest/2129/problem/D dp[l][r][a][b]: 表示只考虑放置[l,r]区间内部的数,并且满足所有的s[l]~s[r]的条件,对l-1的贡献是a,对r+1的贡献是b的方案数 转移: 对于dp[l][r][a][b]来说,枚举第一个放置的数,比如说是k,如果k对…...
LGP7115 [NOIP 2020] 移球游戏 学习笔记
LGP7115 [NOIP 2020] 移球游戏 学习笔记 Luogu Link 前言\(\texttt{NOIP2020}\) 笑传之 \(\texttt{Change Content of Balls.in}\)。致敬传奇修改文件选手我也不知道是谁。 题意简述 你面前有 \(n+1\) 根柱子。对于前 \(n\) 个柱子,每根上有 \(m\) 个球,而第 \(n+1\) 根初始是…...
阿里为何建议MVC+Manager层混合架构?
MVC 架构的弊端 Manager 层的特征 Manager 层使用案例传统三层架构代码示 引入 Manager 层后的代码示例初入编程世界时,前辈们总会教导我们,系统设计应遵循 MVC(Model - View - Controller) 架构。MVC 架构就像一个精巧的齿轮组,将整个系统清晰地划分为 Model(模型)、Vi…...
Android(Kotlin)+ ML Kit:移动端英文数字验证码识别实战
1 概述与适用场景 在移动端直接对截图或拍照的英文数字验证码做识别,可以用于自动化测试、无障碍辅助或内部工具。使用 Google ML Kit 的 Text Recognition(可离线运行)可以避免服务端延迟。为了提升识别率,我们在前端加入图像预处理(灰度、二值化、去噪和放大)再送给 OC…...
用Android(Kotlin)+ ML Kit:移动端英文数字验证码识别实战
1 概述与适用场景 在移动端直接对截图或拍照的英文数字验证码做识别,可以用于自动化测试、无障碍辅助或内部工具。使用 Google ML Kit 的 Text Recognition(可离线运行)可以避免服务端延迟。为了提升识别率,我们在前端加入图像预处理(灰度、二值化、去噪和放大)再送给 OC…...
“人工智能+”的坚硬内核,边缘地带的“数字火种”:大模型如何烧出一片新天地
本文由大模型根据作者提问生成,仅修改标题。一场由“失业工程师+过气博主+快烂了的瓜”引发的变革,正悄然重塑中国AI的商业逻辑。如果你只关注科技头条,你会觉得AI的故事属于巨头:万亿参数、军备竞赛、AGI威胁论。但在主流视野之外,真正的革命正在边缘地带发生。这里没有光…...
详细介绍:10:00开始面试,10:06就出来了,问的问题有点变态。。。
详细介绍:10:00开始面试,10:06就出来了,问的问题有点变态。。。pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier Ne…...
PHP启动报错:liboing.so.5:cannot op如何处理?
在 PHP 启动时报错 liboing.so.5: cannot open shared object file: No such file or directory 是因为系统无法找到或加载 liboing.so.5 共享库。这通常是由于以下原因之一导致的:库文件缺失:系统中没有安装 liboing.so.5 文件。 路径未配置:系统未正确配置动态链接库路径。…...
时空倒流 Time - 题解
设 \(x\) 轮为负操作,\(y\) 轮为正操作,\(d\) 为需要修改的差值(正负同理,取正即可),那么可更改成的范围为 \(-x \times R +y*L \sim -x*L+y*R\),令上式为 \(M \sim N\),易得 M 为最小的可能值,N 为最大的可能值,可通过不断给 M 加 1,使 M 变成 N。 综上,枚举 \(x \…...
202508_QQ_XORPNG
Tags:XOR,PNGLSB 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202508_QQ_XOR&PNG 0x01. WP 01.十六进制编辑器核对 打开发现文件内容并非PNG常见文件头,尝试与常见PNG文件头XOR发现循环的KEY为kelaibe…...
Voice Agent 全球开发者比赛,TEN Dev Challenge 2025 等你来战!
TEN Dev Challenge 2025 全球开发者大赛现已启动,本次赛事聚焦实时交互与对话式AI领域,面向全球开发者开放参与通道。无论您是独立开发者,还是 3 人以内的小型开发团队,均可通过线上形式参与,并有机会角逐总计 1.1 万美元奖金,同时获得行业级展示与合作资源。💰 USD 11…...
第02周 预习:Java基础语法2、面向对象入门 - hohohoho--
第02周 预习:Java基础语法2、面向对象入门项目名称 内容课程名称 java班级 网安2413学生姓名 王璐学号 202421336068预习 1.1 学习目标掌握引用类型及常见类:数组、数组列表(ArrayList)、方法及引用类型作为方法参数 掌握类、对象、方法、属性相关基本概念,对象的初始化。 能…...
第六届机器学习与计算机应用国际学术会议(ICMLCA 2025)
第六届机器学习与计算机应用国际学术会议(ICMLCA 2025) 2025 6th International Conference on Machine Learning and Computer Application(ICMLCA 2025) 第六届机器学习与计算机应用国际学术会议(ICMLCA 2025)定于2025年10月17-19日在中国深圳隆重举行。本届会议将主要关注…...
设计模式-享源模式 - MaC
什么是享元模式? 享元模式是一种结构型设计模式,它通过共享技术来有效地支持大量细粒度的对象。享元模式通过共享已经存在的对象来减少创建对象的数量,从而减少内存占用和提高性能。 享元模式包含以下角色:享元接口(Flyweight):声明一个接口,通过它可以接受并作用于外部状…...
# 数论知识讲解与C++代码:唯一分解定理、辗转相除法、埃氏筛与线性筛(含质因数分解示例)
C++ 模板:唯一分解定理、辗转相除法、埃氏筛与线性筛(含质因数分解示例) 下面给出一套实用的 C++ 模板,包含:辗转相除法(求 gcd / lcm) 试除法的质因数分解(适合小到中等 n) 使用埃氏筛预生成素数(并用于分解) 线性筛(线性时间生成素数,并可得到每个数的最小质因子…...
第九届交通工程与运输系统国际学术会议(ICTETS 2025)
第九届交通工程与运输系统国际学术会议(ICTETS 2025) 2025 9th International Conference on Traffic Engineering and Transportation System (ICTETS 2025) 第九届交通工程与运输系统国际学术会议(ICTETS 2025)将由大连理工大学主办,大连理工大学建设工程学院交通运输系…...
小红书开源 FireRedTTS-2;全栈开源应用+嵌入式+电路设计:BUDDIE AI 语音交互方案丨日报
开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…...
深度解析 ADC 偶联技术:从随机偶联到定点偶联,如何平衡抗肿瘤 ADC 的活性、稳定性与均一性?
抗体药物偶联物(ADC)作为 “精准抗癌利器”,通过重组单克隆抗体的靶向性与小分子细胞毒性药物的高活性结合,实现了 “靶向递送、精准杀伤” 的治疗理念 —— 既降低了小分子毒素对正常细胞的毒副作用,又提升了肿瘤治疗的疗效,已成为近年来抗肿瘤药物研发的核心赛道。然而…...
豆包P图大更新,网友们已经玩嗨了。
https://news.cnblogs.com/n/800390/最近,大伙有没有感觉互联网被 AI 图片占领了。不是刷到朋友圈的大伙自己搓的手办。。神秘锅哥就是刷到大伙和各路大佬的偶遇合照。。怎么像有人一夜之间给地球开了个创造模式,想创啥就创啥,就我连篇稿都创不出来是吧?关注 AI 圈的差友应…...
【初赛】无向图度数性质 - Slayer
无向图度数性质 一、基础概念:顶点度数定义 在无向图 $ G = (V, E) $ 中:顶点 $ v \in V $ 的度数 $ \deg(v) $ 指关联于该顶点的边的数量 特殊情况:环($ (v, v) $)对 $ \deg(v) $ 贡献 2 孤立点度数为 0 非环边 $ (u, v) $ 对 $ \deg(u) $ 和 $ \deg(v) $ 各贡献 1二、核…...
$p\oplus q=r$
很牛很好的题,但不知道为什么 qoj 这么多踩。 原题/原题 简介题面:问题 A:构造两个长度为 \(n\) 的包含 \(0\sim n-1\) 的排列 \(p,q\),使得 \(r=p\oplus q\) 也是个排列。首先特判 \(n=1\)。然后发现 \(\oplus_{i=0}^{n-1} r_i=\oplus_{i=0}^{n-1} q_i\oplus_{i=0}^{n-1}q…...
2025年金融行业API安全最佳实践:构建纵深防御体系
2025年金融行业API安全最佳实践:构建纵深防御体系金融行业数字化转型深度依赖API技术,开放业务模式也带来新的安全挑战。构建有效的API安全防护体系需覆盖全生命周期,结合管理要求、技术工具和运营机制,并借鉴行业实践案例。提出关键实践方法与实施框架金融行业数字化转型深…...
Jack-of-All-Trades
Jack-of-All-Trades 一、信息收集先使用nmap扫一下Ip看看开放了哪些端口,这里很奇怪,22端口上面却是部署着http协议,看了一下wp这里要使用浏览器绕过这个限制nmap -sS -A -Pn 10.10.196.165 这里使用firefox,在导航栏里面搜索about config然后再出来的搜索框这里再搜索netw…...
Matlab的交通标志定位实现
基于Matlab的交通标志定位实现方案,结合颜色分割、形态学处理和轮廓分析技术一、代码 %% 参数设置 imgPath = traffic_sign.jpg; minArea = 500; % 最小区域面积 maxArea = 10000; % 最大区域面积 colorThreshold = 0.8; % 颜色相似度阈值%% 图像预处理 img = imread(imgP…...
怎样在 Salesforce Flow 中获取当前 Salesforce 组织的 URL
可以在 Flow 中配置一个 Formula 类型的变量: LEFT($Api.Partner_Server_URL_260, FIND( /services, $Api.Partner_Server_URL_260))...
reLeetCode 热题 100-3 最长连续序列扩展 排序算法 - MKT
reLeetCode 热题 100-3 最长连续序列扩展 排序算法...
vuejs3.0 从入门到精通【左扬精讲】—— 从原生到原子化:一文梳理现代 CSS 技术体系(2025 版)
vuejs3.0 从入门到精通【左扬精讲】—— 从原生到原子化:一文梳理现代 CSS 技术体系(2025 版)作为前端开发的核心技术之一,CSS(层叠样式表)早已不是 “写几行样式” 那么简单。随着项目规模扩大和工程化需求升级,CSS 技术栈也衍生出众多分支 —— 从解决复用性的预处理器…...
java中JSON字符串处理的踩坑
在处理JSON字符串的时候,读取的数据原封不动每一行是,前后有两个引号"{\"cuidC54E92418CA1CD099A5AFC4D2F322015|VECB5VMT4\": {\"REFINED_APPLIST_TIMESTAMP\": 1756716480, \"DEVICE_INFO\": {\"SOURCE\": 131072, \"br…...
11111
1111111111...
TIA Portal中S7-1500F CPU与ET200SP安全模块的配置例程(转载)
ET200SP 分布式 IO 系统除 ET200SP 标准模块外,还包含故障安全模块。具有 PROFINET接口的安全 CPU 与配有故障安全模块的 ET200SP IO设备可以实现安全功能。配置过程与标准系统中一样,通过在硬件组态中进行网络连接,并在在线状态下分配从站的设备名称。ET200SP上的故障安全模…...
获取第一个运行的Word应用程序实例
获取第一个运行的COM应用程序实例1 using System;2 using System.Collections.Generic;3 using System.Runtime.InteropServices;4 using System.Runtime.InteropServices.ComTypes;5 6 /// <summary>7 /// 提供查询运行中COM对象的改进方案8 /// </summary>9 publ…...