热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

qchart坐标轴自适应,qt小项目实例

若该文为原创文章,转载请注明原文出处本文章博客地址:https:blog.csdn.netqq21497936articledetails111660400长期持续带来更

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

合作案例专栏:案例分享(体验Demo可下载,只定制)
需求

  1. 双Y轴段曲线;
  2. 拽拖分析已有数据;
  3. 支持悬浮显示当前最近x的各段y坐标;
  4. 优化显示性能以及缓存;
  5. 支持各种有颜色的调整‘;
  6. 读取文件或者下位机数据;


相关博客

  《案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)》
  《案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)》
  《案例分享:Qt便携式致病菌快速检测仪(账号管理、实验过程、二维图表、历史数据、通讯管理、实验报告、中英文等等)》
  《案例分享:Qt多通道数据采集系统(通道配置、电压转换、采样频率、通道补偿值、定时采集、导出excel和图表、自动XY轴、隐藏XY轴、实时隐藏显示通道)》
  《Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用》
  《Qt开发笔记之Qwt(一):Qwt介绍、编译与Demo》


注意

  Qt相关的二维折线图,采用其他方式都无法实现多段Y轴(非双Y轴,单Y轴多段),包括QCharts、QCustomPlot、Qwt,其他已有的框架内嵌web可实现,基于需要实时采集数据,内嵌web实时体验并不好,于是写了个基础框架,以便实现实时数据的大量采集。


Demo

  
  
  

体验下载地址

  CSDN(粉丝免积分下载):https://download.csdn.net/download/qq21497936/13777399
  QQ群:1047134658(点击“文件”搜索“chartDemo”,群内与博文同步更新)


V1.1.0


  


Demo部分源码 #ifndef LINECHART2WIDGET_H#define LINECHART2WIDGET_H#include #include #include #include #include class LineChart2Widget : public QWidget{ Q_OBJECTpublic: explicit LineChart2Widget(QWidget *parent = nullptr);public: void addData(QVector vectorPoint); void setData(QVector vectorPoint); void clear(); void addData2(QVector vectorPoint); void setData2(QVector vectorPoint); void clear2();protected: QPointF realConvertToChart(QPointF pointF); // 实际点转为图表点坐标 QPointF chartConvertToReal(QPointF pointF); // 图表点坐标转为实际点 QVector realConvertToChart(QVector vectorPointF); // 实际点转为图表点坐标 QPointF realConvertToChart2(QPointF pointF); // 实际点转为图表点坐标 QPointF chartConvertToReal2(QPointF pointF); // 图表点坐标转为实际点 QVector realConvertToChart2(QVector vectorPointF); // 实际点转为图表点坐标protected: void paintEvent(QPaintEvent *event); void showEvent(QShowEvent *event); void resizeEvent(QResizeEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event);protected: void drawBackground(QPainter *painter); // 绘制背景 void drawMarginBackground(QPainter *painter); // 绘制边框背景(边框的) void drawAxis(QPainter *painter); // 绘制坐标轴 void drawLabel(QPainter *painter); // 绘制坐标值 void drawLines(QPainter *painter); // 绘制曲线 void drawCursorRealValue(QPainter *painter); // 绘制实际值 void drawMouseCross(QPainter *painter); // 绘制鼠标的十字线 void drawTwoValue(QPainter *painter); // 绘制双轴的X,Y值(最近接X轴的上一个Y点)private: double _leftMargin; // 左边距离(坐标轴距离左部边框) double _rightMargin; // 右边距离(坐标轴距离右部边框) double _bottomMargin; // 底部距离(坐标轴距离底部边框) double _topMargin; // 顶部距离(坐标轴距离顶部边框) double _left; // 左部x坐标 double _right; // 右部x坐标 double _top; // 顶部y坐标 double _bottom; // 底部y坐标 double _width; // 宽度 double _height; // 高度 double _minX; // x轴最小值 double _maxX; // x轴最大值 QColor _backgroundColor; // 背景颜色 QColor _axisColor; // 坐标轴颜色 QColor _axisLabelColor; // 坐标轴文本颜色 QColor _lineColor; // 折线颜色 QColor _dataColor; // 矩形文字颜色 QColor _dataBackgroundColor;// 矩形背景颜色 int _xTickCount; // X轴主tick int _xTickLength; // X轴主tick长度 int _xSubTickCount; // X轴子tick int _xSubTickLength; // X轴子tick长度 double _xTickDistance; // 临时变量: double _xSubTickDistance; // 临时变量: double _xTickValue; // 临时变量: double _xSubTickValue; // 临时变量: double _xTickValueScale; // 临时变量: double _xSubTickValueScale; // 临时变量: bool _leftButtonPressed; // 临时变量:鼠标左键是否按下 QPointF _originPointF; // 临时变量:记录鼠标左键按下的坐标 QPointF _offsetPointF; // 临时变量:偏移的坐标段 QPointF _zeroPointF; // 零点,用于区分x轴和y轴的坐标 QPointF _nowPointF; // 临时变量:零点 double _scale; // 缩放比例 QVector _vectorPointF; // 一条线的存储位置 QVector _vectorPointF2; // 一条线的存储位置 bool _showCursorRealValue; // 是否显示鼠标当前de的值 bool _canDragYAxis; // Y轴是否允许被拖动 bool _showCrossAxis; // 画十字轴private: int _yAxisNumber; // 几段Y轴 int _yAxisSpace; // Y轴间距 double _yAxisHeight; // 每一段Y轴高度 double _offsetY; // 临时变量: int _yTickCount; // Y轴分的主tick int _yTickLength; // Y轴主tick长度 int _ySubTickCount; // Y轴两个大tick之间的小tick int _ySubTickLength; // Y轴子tick长度 double _yTickDistance; // 临时变量: double _ySubTickDistance; // 临时变量:private: QString _yAxisContent; // 第一段Y轴内容 double _yTickValue; // 临时变量: double _ySubTickValue; // 临时变量: double _yTickValueScale; // 临时变量: double _ySubTickValueScale; // 临时变量:private: QString _yAxisContent2; // 第一段Y轴内容 double _yTickValue2; // 临时变量: double _ySubTickValue2; // 临时变量: double _yTickValueScale2; // 临时变量: double _ySubTickValueScale2; // 临时变量:private: double _minY; // y轴最小值 double _maxY; // y轴最大值 double _minY2; // y轴最小值 double _maxY2; // y轴最大值 double _x; // 十字轴的x坐标 double _y1; // 十字轴的导高值 double _y2; // 十字轴的超出值};#endif // LINECHART2WIDGET_H

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400


推荐阅读
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 深入解析 Android TextView 中 getImeActionLabel() 方法的使用与代码示例 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
author-avatar
lao6345790
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有