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

server/2024/10/18 6:01:52/
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.ppmy.cn/server/131270.html

相关文章

苍穹外卖学习笔记(二十一)

文章目录 取消订单OrderControllerOrderServiceOrderServiceImpl 再来一单OrderControllerOrderServiceOrderServiceImpl 取消订单 OrderController /*** 取消订单*/PutMapping("/cancel/{id}")ApiOperation("取消订单")public Result cancel(PathVariabl…

数据结构编程实践20讲(Python版)—08红黑树

本文目录 08 红黑树(Red-Black Tree)S1 说明S2 示例S3:红黑树代码问题1:数据库索引问题2:时间调度问题3:内存管理往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树(Red-Black Tree) S1 说明 红黑树是一种自平衡的二叉搜索树(BST),它具有以…

Agent ReAct小解

ReAct在AI Agent中是一种设计思想&#xff0c;它强调在执行任务时结合推理&#xff08;Reasoning&#xff09;和行动&#xff08;Acting&#xff09;两个方面&#xff0c;使得Agent能够在复杂和动态的环境中更有效地工作。以下是对Agent ReAct的详细解释&#xff1a; 一、ReAc…

windows下,在vscode中使用cuda进行c++编程

安装cuda CUDA Toolkit Downloads | NVIDIA Developer 这里网上教程多的是&#xff0c;在这个网址下载安装即可 我这台电脑因为重装过&#xff0c;所以省去了安装步骤&#xff0c;但是要重新配置环境变量。我重新找到了重装之前的CUDA位置(关注这个bin文件夹所在的目录) 在…

Django makemigrations时出现TypeError: ‘module‘ object is not iterable

使用Python 3.11、Django 5.1.2 写完model进行makemigrations时出现报错 报错的最下面提到了我自己创建的一个应用里的urls.py&#xff0c;尝试着给里面加上一个列表 然后问题解决了。。。 不知道为什么 makemigrations的时候会去检查urls。。。

图书馆自习室座位预约管理微信小程序+ssm(lw+演示+源码+运行)

摘 要 随着电子商务快速发展世界各地区,各个高校对图书馆也起来越重视.图书馆代表着一间学校或者地区的文化标志&#xff0c;因为图书馆丰富的图书资源能够带给我们重要的信息资源&#xff0c;图书馆管理系统是学校管理机制重要的一环&#xff0c;,面对这一世界性的新动向和新…

获取鸿蒙设备Udid遇到的问题

参考官方文档&#xff1a;注册调试设备-调试应用&#xff08;HarmonyOS&#xff09;-AppGallery Connect帮助中心 - 华为HarmonyOS开发者 (huawei.com) 坑一&#xff1a;The sdk hdc.exe version is too low, please upgrade to the latest version. 升级dev工具和sdk配置为api…

java脚手架系列4--测试用例、拦截器

异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题&#xff0c;无论是后端对自己的代码质量把的第一道关也好&#xff0c;也是对测试减缓压力。这里就不过多讲述测试用例的重要性&#xff0c;但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…