Qt:QCustomPlot类介绍

QCustomPlot的核心类就是QCustomPlot类。这个类继承自QWidget,因此可以像其他QWidget一样使用,比如放入布局中。

QCustomPlot类基本结构

  • 一个QCustomPlot对象可以包含多个图层(通过QCPLayer表示),通常使用默认图层。

  • 它包含四个坐标轴(上、下、左、右),默认显示左下两个坐标轴(xAxis和yAxis,另外两个坐标轴是xAxis2,和yAxis2)。坐标轴的类型是QCPAxis。

  • 可以在图表中添加多个图形(Plottables),比如QCPGraph(曲线图)、QCPBars(柱状图)等。这些图形都继承自QCPAbstractPlottable。

  • 可以添加其他元素:标题(通过plotLayout()设置)、图例(QCPLegend)、文本标签(QCPItemText)、直线(QCPItemLine)等。

QCustomPlot图层

QCustomPlot类管理着所有的图层,它默认自带了六个图层:

  • 背景层:background

  • 网格层:grid

  • 绘图层:main

  • 坐标轴层:axes

  • 图例层:legend

  • overlay层:overlay

层的顺序的不同,绘制的顺序也不同,越在底下的层越早绘制,默认为绘图层main。

每个QCustomPlot类默认包含一个绘图区域QCPAxisRect,一个QCPAxisRect一般来说会有上轴xAxis2、下轴xAxis、左轴yAxis和右轴yAxis2四个轴。

QCustomPlot使用步骤:

  • 将QCustomPlot加入工程。通常你可以直接包含qcustomplot.h和qcustomplot.cpp文件。

  • 在UI设计器中,可以将一个QWidget提升为QCustomPlot,或者直接在代码中创建。

  • 在代码中,通过addGraph()添加一条曲线(返回一个QCPGraph指针),然后设置数据。

  • 设置坐标轴范围、标签等。

  • 如果需要实时更新,在定时器中更新数据并调用replot()。

示例代码(部分)

#include "qcustomplot.h"// 创建一个QCustomPlot对象(假设已经有一个QWidget容器,比如在UI设计器中放置了一个QWidget,然后提升为QCustomPlot)
QCustomPlot *customPlot = new QCustomPlot(parent);// 添加一条曲线
QCPGraph *graph = customPlot->addGraph();
graph->setData(x, y); // x和y是QVector<double>类型的数据// 设置坐标轴标签
customPlot->xAxis->setLabel("X");
customPlot->yAxis->setLabel("Y");// 设置坐标轴范围,可以自动调整
customPlot->rescaleAxes();// 重绘
customPlot->replot();

实时绘图需要定时器不断更新数据,然后重绘。可以使用addData()方法追加数据点,避免每次更新全部数据点,提升性能。

交互功能:

  • 缩放:

customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
  • 图例可点击,然后连接信号:

customPlot->legend->setSelectableParts(QCPLegend::spItems); // 连接信号槽。
selectionChangedByUser

自定义绘图元素:通过QCPAbstractItem派生类可以绘制各种自定义的图形元素(如箭头、文本等)。

多图层:用于组合多种图形,比如在一个图表中既有曲线又有柱状图,且柱状图在曲线之上显示。

QCustomPlot核心功能亮点​

​多图层支持​

  • 独立的图层系统(QCPLayer),可分层绘制图形元素(如曲线、文本、形状)。

  • 图层叠加顺序可控,支持动态显隐图层。

​丰富的基础绘图类型​

  • 曲线图​​:QCPGraph(折线、曲线、散点图)

  • ​​柱状图​​:QCPBars(分组/堆叠柱状图)

  • ​​统计图​​:QCPStatisticalBox(箱线图)、QCPColorMap(热力图)

  • ​​金融图​​:QCPFinancial(K 线图)

  • ​​极坐标图​​:QCPPolarGraph(雷达图、极坐标曲线)

​轴系统与刻度​

  • 双轴系统(X/Y轴),支持多轴共存(如左右Y轴、上下X轴)。
  • 自定义刻度生成器(QCPAxisTicker),支持对数轴、时间轴、文本标签轴。
  • 轴范围灵活控制:自动缩放、手动固定、拖拽平移。

​交互式操作​

  • ​平移/缩放​​:支持鼠标拖拽平移、滚轮缩放(可限定方向)。

  • ​点选/框选​​:通过 QCPSelectionRect 实现矩形区域选择数据点。

  • ​图例交互​​:点击图例隐藏/显示关联曲线。

  • ​数据光标​​:实时显示数据点坐标的 QCPItemTracer

​样式高度可定制​

  • 线条样式:线宽、线型(实线/虚线)、颜色渐变。

  • 填充样式:支持渐变填充、纹理贴图。

  • 文本与字体:任意位置的文本标签(QCPItemText)、字体属性自定义。

  • 轴外观:刻度长度、标签旋转、背景网格线密度。

QCustomPlot高级特性

实时数据刷新​

​通过 QCustomPlot::replot() 高效重绘图表,适合动态数据流(如传感器数据):

// 动态追加数据示例
QVector<double> x, y;
x << 1 << 2 << 3;
y << 5 << 2 << 7;
customPlot->graph(0)->setData(x, y);
customPlot->replot(); // 刷新显示

 数据选择与编辑​

​启用 setInteractions 支持数据点选择(单击/框选):

customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

导出功能​

​一键导出为矢量图或位图:

customPlot->savePdf("chart.pdf", 0, 0); // PDF 矢量图
customPlot->savePng("chart.png", 800, 600); // PNG 位图

​性能优化​

大容量数据处理(十万级数据点)时启用 setOpenGl(true) 加速渲染。

通过 setAntialiasedElements 按需启用抗锯齿以平衡性能与质量。

部分代码

// 创建简单曲线图
QCustomPlot *plot = new QCustomPlot;
plot->addGraph(); // 添加曲线
plot->graph(0)->setData(xData, yData); // 填充数据// 坐标轴配置
plot->xAxis->setLabel("X轴");
plot->yAxis->setLabel("Y轴");
plot->xAxis->setRange(0, 10); // 固定范围
plot->yAxis->setRange(-5, 15);// 交互设置
plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);// 实时刷新定时器
QTimer *timer = new QTimer;
QObject::connect(timer, &QTimer::timeout, [&](){addNewDataPoint();   // 更新数据plot->replot();
});
timer->start(50); // 20Hz刷新

适用场景​

  • 科学计算可视化(如 MATLAB 风格绘图)

  • 工业监控实时曲线

  • 金融数据分析(K 线图、趋势线)

  • 嵌入式设备数据显示(低资源占用)

  • 学术论文图表生成(矢量输出)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914182.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022 上使用ffmpeg

目录 1. 添加包含目录 2. 添加库目录 3. 添加依赖项 4. 添加动态库目录 5. 测试 在解决方案中右击项目名称&#xff0c;弹出的窗口中选择 "属性"。 1. 添加包含目录 "C/C" -> "常规" -> "附加包含目录"中添加 ffmpeg中的…

Elasticsearch 线程池

Elasticsearch 线程池「每个线程池到底采用哪种实现策略」&#xff1a;Elasticsearch 线程池&#xff08;ThreadPool&#xff09;中 **所有内置线程池名称的常量定义**。 每个字符串常量对应一个 **线程池的名字&#xff08;name&#xff09;**&#xff0c;也就是你在 Thread…

深入理解 Next.js API 路由:构建全栈应用的终极指南

Next.js 是一个强大的 React 框架&#xff0c;不仅支持服务端渲染&#xff08;SSR&#xff09;和静态站点生成&#xff08;SSG&#xff09;&#xff0c;还提供了内置的 API 路由功能&#xff0c;使开发者能够轻松构建全栈应用。传统的全栈开发通常需要单独搭建后端服务&#xf…

【6.1.2 漫画分布式事务技术选型】

漫画分布式事务技术选型 &#x1f3af; 学习目标&#xff1a;掌握架构师核心技能——分布式事务技术选型与一致性解决方案&#xff0c;构建高可靠的分布式系统 &#x1f3ad; 第一章&#xff1a;分布式事务模式对比 &#x1f914; 2PC vs 3PC vs TCC vs Saga 想象分布式事务就…

液冷智算数据中心崛起,AI算力联动PC Farm与云智算开拓新蓝海(二)

从算法革新到基础设施升级&#xff0c;从行业渗透到地域布局&#xff0c;人工智能算力正以 “规模扩张 效率提升”双轮驱动中国数字经济转型。中国智能算力规模将在 2025 年突破 1000 EFLOPS&#xff0c;2028 年达到 2781.9 EFLOPS&#xff0c;五年复合增长率 46.2%&#xff0…

《QtPy:Python与Qt的完美桥梁》

QtPy 是什么 在 Python 的广袤编程宇宙中&#xff0c;当涉及到图形用户界面&#xff08;GUI&#xff09;开发&#xff0c;Qt 框架宛如一颗璀璨的明星&#xff0c;散发着独特的魅力。而 QtPy&#xff0c;作为 Python 与 Qt 生态系统交互中的关键角色&#xff0c;更是为开发者们开…

ubuntu环境下调试 RT-Thread

调试 RT-Thread 下载源码 github 搜索 RT-Thread 下载源码 安装 python scons 环境 你已经安装了 kconfiglib&#xff0c;但 scons --menuconfig 仍然提示找不到它。这种情况通常是由于 Python 环境不一致 导致的&#xff1a;你在一个 Python 环境中安装了 kconfiglib&#xff…

【数据结构初阶】--顺序表(二)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

Java中的方法传参机制

1. 概述Java中的方法传参机制分为两种&#xff1a;值传递&#xff08;Pass by Value&#xff09; 和 引用传递&#xff08;Pass by Reference&#xff09;。然而&#xff0c;Java中所有的参数传递都是值传递&#xff0c;只不过对于对象来说&#xff0c;传递的是对象的引用地址的…

C++——this关键字和new关键字

一、this 关键字1. 什么是 this&#xff1f;this 是 C 中的一个隐式指针&#xff0c;它指向当前对象&#xff08;即调用成员函数的对象&#xff09;&#xff0c;在成员函数内部使用&#xff0c;用于引用调用该函数的对象。每个类的非静态成员函数内部都可以使用 this。使用 thi…

Python中类静态方法:@classmethod/@staticmethod详解和实战示例

在 Python 中&#xff0c;类方法 (classmethod) 和静态方法 (staticmethod) 是类作用域下的两种特殊方法。它们使用装饰器定义&#xff0c;并且与实例方法 (def func(self)) 的行为有所不同。1. 三种方法的对比概览方法类型是否访问实例 (self)是否访问类 (cls)典型用途实例方法…

FastGPT革命:下一代语言模型的极速进化

本文深度解析FastGPT核心技术架构&#xff0c;涵盖分布式推理、量化压缩、硬件加速等前沿方案&#xff0c;包含完整落地实践指南&#xff0c;助你掌握大模型高效部署的终极武器。引言&#xff1a;当大模型遭遇速度瓶颈2023年&#xff0c;ChatGPT引爆全球AI热潮&#xff0c;但企…

Geant4 安装---Ubuntu

安装工具 C/C工具包 sudo apt install build-essentialCmake sudo apt install -y cmakeccmake sudo apt install -y cmake-curses-gui安装Qt可视化工具(不需要可视化可以不安装) sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator 安装Ope…

Spring Boot中请求参数读取方式

目录 一、前言 二、六种参数读取方式 1.RequestParam 2.PathVariable 3.RequestBody 4.RequestHeader 5.CookieValue 6.MatrixVariable 三、对比和搭配 1.适用方法类型及建议使用场景 2.建议使用的请求路径注解 3. 多种参数同时使用 4.同一请求不同方案&#xff1f…

2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2025年&#xff0c;已经开始使用AB卷题库&#xff0c;题目和往期一样&#xff0c;旧题加新题的组合&#xff0c;有题目第一时间更新&#xff0c;大家可以跟着继续学习&#xff0c;目前使用复用题较多&#xff0c;可在OJ上直接找到对应的AB卷学习&#xff0c;可以放心学习&#…

分析新旧因子相关性

计算一组新因子、并分析它们与已有因子间的相关性1. 导入库和初始化环境功能代码解析数据加载2. 定义新因子计算函数功能代码解析因子 1&#xff1a;波动率过滤器&#xff08;filter_001_1&#xff09;因子 2&#xff1a;ATR 过滤器&#xff08;filter_001_2&#xff09;因子 3…

Unity Demo——3D平台跳跃游戏笔记

今天是一个3D平台跳跃游戏的笔记。我们按照以下分类来对这个项目的代码进行学习&#xff1a;核心游戏系统 (Core Game Systems)核心游戏系统是IkunOdyssey项目的基础&#xff0c;负责所有游戏对象&#xff08;如玩家、敌人、道具等&#xff09;的通用行为和物理交互。它通过实体…

【C语言】回调函数、转移表、qsort 使用与基于qsort改造冒泡排序

文章目录数组指针/指针数组函数指针函数指针数组函数指针数组用途(转移表)回调函数qsort函数基于qsort改造冒泡排序源码数组指针/指针数组 int arr1[5] { 1,2,3,4,5 };int (*p1)[5] &arr1; //p1是数组指针变量int* arr2[5] { 0 }; //arr2是指针数组指针数组是存放指…

vue3 uniapp 使用ref更新值后子组件没有更新 ref reactive的区别?使用from from -item执行表单验证一直提示没有值

遇到这样一个问题&#xff0c;我有个1个页面A&#xff0c;一个from表单组件&#xff0c;一个form-item组件&#xff0c; 使用是这样的&#xff0c;我在父组件A中使用 &#xff0c;执行表单验证一直提示没有值咱们先来讲一讲ref 和reactive的区别 ref 用来创建一个基本类型或单…

PyQt5布局管理(QBoxLayout(框布局))

QBoxLayout&#xff08;框布局&#xff09; 采用QBoxLayout类可以在水平和垂直方向上排列控件&#xff0c;QHBoxLayout和 QVBoxLayout类继承自QBoxLayout类。 QHBoxLayout&#xff08;水平布局&#xff09; 采用QHBoxLayout类&#xff0c;按照从左到右的顺序来添加控件。QHBoxL…