基于Qt/QChart实现折线图和散点图的绘制示例程序解析

1. 项目简介

本文讲解的是一个基于Qt框架的QChart模块实现的折线图与散点图结合的绘制程序。程序通过自定义类LineChartWithGradient实现折线图、散点图以及带有渐变填充的区域图,最终形成一个美观的数据可视化效果。

在这里插入图片描述

2. 类构造函数
LineChartWithGradient::LineChartWithGradient(QWidget *parent): QChartView(new QChart(), parent), m_series(new QLineSeries()), m_markerSeries(new QScatterSeries()), m_areaSeries(new QAreaSeries()) {
  • QChartView:用于显示图表的控件。
  • QLineSeries:用于绘制折线图的数据系列。
  • QScatterSeries:用于绘制散点图的数据系列。
  • QAreaSeries:实现区域填充,显示折线图下方的渐变颜色。

构造函数将这些系列对象初始化并将它们添加到图表中,确保折线图与散点图同步显示。

3. 添加折线、散点和区域系列
    m_areaSeries->setUpperSeries(m_series);  // 关联折线图与区域图m_markerSeries->setMarkerShape(QScatterSeries::MarkerShapeCircle);  // 设置散点图点的形状m_markerSeries->setMarkerSize(10.0);  // 设置点的大小m_markerSeries->setColor(Qt::red);  // 设置点的颜色chart()->addSeries(m_areaSeries);  // 将区域系列添加到图表chart()->addSeries(m_series);  // 添加折线系列chart()->addSeries(m_markerSeries);  // 添加散点系列
  • setUpperSeries:将m_series折线系列设置为区域系列的上边界。
  • QScatterSeries:设置散点的形状为圆形,大小为10像素,颜色为红色。
  • addSeries:将不同系列添加到图表,使得折线、区域和散点能够在同一图表中渲染。
4. 数据点设置
void LineChartWithGradient::setData(const QList<QPointF> &points) {m_series->replace(points);m_markerSeries->replace(points);applyGradient();  // 应用渐变效果chart()->update();
}
  • **setData**方法将数据点替换为传入的QList<QPointF>,确保折线图和散点图的数据同步更新。
  • applyGradient:在数据更新后重新应用渐变填充效果。
5. 坐标轴范围设置
void LineChartWithGradient::setXMinMaxvalue(const qreal min, const qreal max) {chart()->axes(Qt::Horizontal).first()->setRange(min, max);  // 设置X轴范围
}
void LineChartWithGradient::setYMinMaxvalue(const qreal min, const qreal max) {chart()->axes(Qt::Vertical).first()->setRange(min, max);  // 设置Y轴范围
}
  • **setXMinMaxvaluesetYMinMaxvalue**分别设置了图表X轴和Y轴的最小和最大值,确保图表在特定的范围内展示。
6. 初始化图表和样式
void LineChartWithGradient::setupChart() {chart()->setTitle(tc("散点渐变折点图"));  // 设置图表标题QPen pen(Qt::red);pen.setWidth(2);  // 设置折线的宽度m_series->setPen(pen);  // 应用折线的画笔样式applyGradient();  // 应用渐变效果
}
  • **setupChart**方法主要用于设置图表的初始样式,包括图表标题、折线宽度等。折线的宽度设置为2像素,颜色为红色。
7. 应用渐变效果
void LineChartWithGradient::applyGradient() {QLinearGradient gradient(QPointF(0, 0), QPointF(0, 1));  // 定义线性渐变gradient.setColorAt(0.0, Qt::red);  // 渐变起始颜色为红色gradient.setColorAt(1.0, Qt::transparent);  // 渐变终止颜色为透明gradient.setCoordinateMode(QGradient::ObjectBoundingMode);  // 以对象坐标模式计算渐变m_areaSeries->setBrush(gradient);  // 设置区域系列的画刷为渐变效果m_areaSeries->setPen(Qt::NoPen);  // 区域图无边框
}
  • **applyGradient**方法用于实现区域图的渐变效果。使用了QLinearGradient类实现线性渐变,从红色渐变到透明,并将其设置为QAreaSeries的填充画刷。
8. 图表效果展示

从附带的图片可以看出,图表包括以下几个部分:

  • 折线图显示数据的变化趋势。
  • 散点图标注了每个数据点的位置,圆点较大,颜色为红色。
  • 折线图下方有红色渐变填充区域,使得图表更具视觉效果。
  • X轴和Y轴都有明确的标度,背景采用深色主题,图表风格简洁明了。
总结

该程序通过Qt提供的图表模块,结合折线、散点和渐变区域图,实现了一个漂亮的散点折线图。程序中使用了大量自定义设置,例如图表样式、渐变效果等,使得图表在呈现数据的同时具有良好的视觉效果。

这种图表适用于展示数据变化趋势,同时突出关键数据点的情境,适合需要清晰展示和标记数据点的场景。

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

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

相关文章

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)

文章目录 写在前面一、Docker 官方源二、更换Docker 国内可用镜像源 &#xff08;推荐使用&#xff09;参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04&#xff0c;docker-27.3.1 一、Docker 官方源 打开 /etc/docker/daemon.json文件&#xff1a; sudo gedit …

3.Three.js程序基本框架结构和API说明

Three.js程序基本框架结构和API说明 1.基本框架结构代码 一个基本的Three.js程序&#xff0c;基本都需要设置场景、渲染器、相机、灯光等等通用操作&#xff0c;因而我们可以把Three.js基本程序框架进行整理&#xff0c;如下。其中&#xff0c;我们可以用Three.js提供的Orbit…

JAVA 中的克隆对象

克隆对象就是复制一个一模一样的对象&#xff0c;但是复制出来的对象和原对象不是同一个对象&#xff0c;是两个对象&#xff0c;只不过复制过来的对象和原对象除了内存地址之外&#xff0c;其它的属性一模一样。 在超类 Object 中有一个 clone() 方法&#xff1a; protected…

NC 单据模板自定义项 设置参照(自定义参照)

NC 单据模板自定义项 设置参照&#xff08;自定义参照&#xff09; 如图下图&#xff0c;NC 单据模板自定义项 设置参照&#xff1a; 1、选择需要设置参照的自定义字段&#xff0c;选择高级属性页签&#xff0c;在类型设置中&#xff0c;数据类型选择参照信息&#xff0c;即bd…

Ubuntu-Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题

Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 一、问题描述二、原因分析三、解决办法 一、问题描述 Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 zhyzhy-HP:~/Sources/mpv-examples/libmpv/qt$ make g -c -pipe -g -Wall -Wextra -D_REENTRANT -fPIC -DQT_WIDGET…

python 基础笔记(其实有点内容的)

print(math.gamma(n)) # 求 (n-1) 的阶乘 数值, 数值计算 format(50, “b”) bin(50)[2:]&#xff0c; 这个“b” 就代表的是 binary format(14, ‘b’) ------> ‘1110’ 去除 0b 去掉前导零 str(000001) # 只适合python2.x ‘1’ “00000001”.lstrip(“0”) # python3…

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试)

图论day62|拓扑排序理论基础、117.软件构建&#xff08;卡码网&#xff09;、最短路径之dijkstra理论基、47.参加科学大会&#xff08;卡码网 第六期模拟笔试&#xff09; 拓扑排序理论基础117.软件构建&#xff08;卡码网&#xff09;最短路径之dijkstra理论基础47.参加科学大…

AI控制工业机器人入门教程

简介 AI控制的工业机器人正在改变现代制造业的面貌。与传统的编程控制不同&#xff0c;AI使机器人能够通过感知环境、自主决策和学习不断优化自身的操作。这篇教程将介绍实现AI控制工业机器人的必要知识和技能&#xff0c;帮助读者从基础开始构建起AI控制机器人的理解和能力。…

OceanBase + DolphinScheduler,搭建分布式大数据调度平台的实践

本文整理自白鲸开源联合创始人&#xff0c;Apache DolphinScheduler PMC Chair&#xff0c;Apache Foundation Member 代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase 的联合大数据方案。 DolphinScheduler是什么&#xff1f; Apache Dolphi…

【论文速看】DL最新进展20241016-低光增强、自动驾驶、图像分割、Diffusion

目录 【低光增强】【自动驾驶】【图像分割】【Diffusion】 【低光增强】 [ACCV 2024] LoLI-Street: Benchmarking Low-Light Image Enhancement and Beyond 论文链接&#xff1a;https://arxiv.org/pdf/2410.09831 代码链接&#xff1a;https://github.com/tanvirnwu/TriFuse …

Pytest+selenium UI自动化测试实战实例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c;有收获也有疑惑&#xff0c;总之最后还是搞个小项目出来证明自己的努力不没有白费 环境准备 1 …

【MySQL】表的查询操作——SELECT

目录 1.select的基本使用 1.1.查询所有列 1.2.查询特定列 1.3.DISTINCT关键字的使用——查询不重复的年级 1.4.带条件的查询 1.5.排序查询结果 1.6.LIMIT的使用——限制返回的行数 1.7.组合使用 WHERE、ORDER BY 和 LIMIT 1.8.查询字段为表达式 1.9.为查询结果指定别名…

攻上云端,独立数据库OceanBase的生存之道

文&#xff5c;白 鸽 编&#xff5c;王一粟 对于很多盲盒爱好者来说&#xff0c;应该都使用过泡泡玛特的线上抽盒机系统&#xff0c;也会发现即使在新品上市时期&#xff0c;其整体抽盲盒的体验也都非常顺畅。 事实上&#xff0c;泡泡玛特的抽盒机系统在2023年经历了一次核心…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目&#xff0c;难度不大&#xff0c;但是非常实用&#xff0c;也是面试问到概率比较大的一类题目…

飞牛NAS未识别到网卡

最新都说国产免费的飞牛NAS非常好用&#xff0c;再也不用搞黑群辉了。 以前也没有搞过NAS&#xff0c;刚好借着这个机会学习一下NAS产品。 在虚拟机上安装&#xff0c;安装还挺顺利&#xff0c;就打算在买来的 也试试&#xff0c;结果系统都安装成功了&#xff0c;但是提示“…

进程通信——管道

文章目录 1. 管道简介2. 无名管道2.1 简介2.2 系统调用2.2.1 无名管道的创建和关闭2.2.2 pipe()2.2.3 无名管道读写说明2.2.4 代码示例 3. 命名管道3.1 简介3.2 mkfifo3.3 对于读进程3.4 对于写进程3.5 代码示例3.5.1 写管道3.5.2 读管道 1. 管道简介 管道是Linux中进程间通信…

物理环境检测及绘制

来解决连续跳跃这个问题&#xff0c;只有在地面上才可以执行跳跃 为了实现这个物理检测&#xff0c;我们需要单独写一个代码&#xff0c;因为除了人物需要检测周围的物理环境以外&#xff0c;我们的敌人也需要检测周围的物理环境&#xff0c;敌人撞墙需要返回继续走&#xff0…

《15分钟轻松学Go》教程目录

在AI快速发展的时代&#xff0c;学习Go语言依然很有用。Go语言擅长处理高并发任务&#xff0c;也就是说可以同时处理很多请求&#xff0c;这对于需要快速响应的AI服务非常重要。另外&#xff0c;Go适合用来处理和传输大量数据&#xff0c;非常适合机器学习模型的数据预处理。 …

linux提权【笔记总结】

文章目录 信息收集通过命令收集信息内核&#xff0c;操作系统&#xff0c;设备信息等用户信息环境信息进程与服务安装的软件服务与插件计划任务查看是否存在明文密码查看与主机的通信信息查看日志信息 通过脚本收集信息LinEnum脚本介绍复现 Linuxprivchecker复现 linux-exploit…