Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用欢迎技术交流和帮助,提供所有IT相关的服务,有需要请联系博主QQ:21497936,若该文为原创文章,未经允许不得转载原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/77847820目录效果​Demo下载地址QCustom…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

若该文为原创文章,转载请注明原文出处
本文章博客地址:Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用_长沙红胖子-CSDN博客
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术(点击传送门)

前言

本文使用QCustomPlot做一个QCustomPlot范例,实现一些基本的操作。

Demo1效果

      Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

Demo1下载地址

QCustomPlotDemo范例_qcustomplot功能大全-QT文档类资源-CSDN下载

Demo2:QCustomPlot v2.0.1 定制文本下标Demo(2019年8月27日补充)

        (注意:QCustomPlot源码是不支持下标文本的。)

Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

Demo3:QCustomPlotDemo定制(2020年12月16日补充)

Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

 相关博客

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

QCustomPlot介绍

QCustomPlot是一个小型的qt画图标类,效果可以,易用,只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用。

QCustomPlot官网:Qt Plotting Widget QCustomPlot – Introduction

QCustomPlot下载地址:Qt Plotting Widget QCustomPlot – Download

QCustomPlot帮助文件

QCustomPlot源码包中,带有qt帮助文件,将其添加进qt帮助文件,添加过程如下图:

       Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

       Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

      Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

      添加完后,即可在qt帮助文件中查看QCustomPlot类相关信息。

本人对于QCustomPlot理解

QCustomPlot是一个二维图表,我们姑且认为其有坐标轴图层和若干其他图层。

坐标轴-图层

坐标轴图形是横轴和纵轴的图层,可设置各种属性,下表是本Demo使用到的属性设置

//下标的格式:数字或者时钟
   ui->customPlot->xAxis->setTickLabelType(QCPAxis::ltNumber);
   //设置时钟下标格式
//   ui->customPlot->xAxis->setDateTimeFormat("hh:mm:ss");
   ui->customPlot->xAxis->setRange(0,8);
   //是否允许自动下标
   ui->customPlot->xAxis->setAutoTickStep(false);
   //手动设置下标,要先禁止自动下标,隔多少间距显示下标
   ui->customPlot->xAxis->setTickStep(1);
   //设置steps之间的间隔杠
   ui->customPlot->xAxis->setAutoSubTicks(false);
   ui->customPlot->xAxis->setSubTickCount(9);//9+1
//   ui->customPlot->axisRect()->setupFullAxesBox();
   //设置横轴标签
   ui->customPlot->xAxis->setLabel("时间(单位s)");
   //设置纵轴范围
   ui->customPlot->yAxis->setRange(-1,1);
   //设置纵轴标签仅使用1个字会报换行符错误后面加个空格
   ui->customPlot->yAxis->setLabel("大小");
   ui->customPlot->yAxis->setAutoTickStep(false);
   ui->customPlot->yAxis->setTickStep(0.2);
   ui->customPlot->yAxis->setAutoSubTicks(false);
   ui->customPlot->yAxis->setSubTickCount(1);//1+1

若干其他-图层

使用其他图层之前,必须使用函数addGraph()先添加图层,添加的图层从序列号0开始计层数,使用函数graph()获取指定图层的指针,获取的图层类似于一张图画;

使用图层指针可以设置画笔setPen()-决定线条的颜色,设置画刷setBrush()-决定其点连成的线到X轴的颜色,实现两条线之间局域用画刷填充,我们需要设置主从图层,从主图层的点画向从图层的点,此时从图层的画刷设置为透明(缺省为透明,若未修改可不设置),然后设置主图层的画刷颜色为我们需要填充的颜色,并使用函数setChannelFillGraph()从使用主图层的画刷画向从图层,从而填充两者点之间的区域。

在图层上画点,使用addData()函数,图层会将每相邻点之间自动用线调连接起来,当点的数据超出显示范围之后,最好使用removeDataBefore()删除范围外的数据,不然内存将一直增加,QCustomPlot不会自己删除。

关键画点效果代码

voidMainWindow::realtimeDataSlot()
{
   //每次刷新点的坐标,并且刷新qt图标的界面
   double key = (double)(_elapsedTimer.elapsed() + _begin) / 1000;
   //10ms更新一个点
   if(key - _lastPointKey > 0.01)
{
        //sin(key*1.6+cos(key*1.7)*2)*10+sin(key*1.2+0.56)*20+26;
       double value0 = qSin(key);
        //sin(key*1.3+cos(key*1.2)*1.2)*7+sin(key*0.9+0.26)*24+26;
       double value1 = qCos(key);       
       if(_start && !_pause)
       {
           if(ui->customPlot->graph(0)->visible()&&ui->customPlot->graph(1)->visible())
               ui->customPlot->graph(0)->setBrush(QBrush(Qt::yellow));
           else
               ui->customPlot->graph(0)->setBrush(QBrush(Qt::transparent));
           //画线
           ui->customPlot->graph(0)->addData(key,value0);
           ui->customPlot->graph(1)->addData(key,value1);
           //画点
           ui->customPlot->graph(2)->clearData();
           ui->customPlot->graph(2)->addData(key,value0);
           //蓝色图层是否可见
           if(ui->customPlot->graph(0)->visible())
           {
               //统一是x的格式,末尾为0也显示
               QString zzz=QString("%1").arg(key);
               for(int index = zzz.size() - zzz.lastIndexOf("."); index < 4; index++)
               {
                   zzz += "0";
               }
               ui->label_maleX->setText(QString("%1").arg(zzz));
//在msvc2010编译上会出现错误:9个QString::arg匹配和 mid右侧不是联合
//             QString strValue0=QString("%1").arg(value0,4,10,QChar('0')).mid(0,6);
               QString strValue0=QString("%1").arg(value0).mid(0,6);
               strValue0 = 
                       strValue0.startsWith("-")? strValue0.mid(0,6):strValue0.mid(0,5);
               ui->label_maleY->setText(strValue0);
           }else
           {
               ui->label_maleX->setText("");
               ui->label_maleY->setText("");
           }
           ui->customPlot->graph(3)->clearData();
           ui->customPlot->graph(3)->addData(key,value1);
           //红色图层是否可见
           if(ui->customPlot->graph(1)->visible())
           {
               //统一是x的格式,末尾为0也显示
               QString zzz = QString("%1").arg(key);
               for(int index = zzz.size() - zzz.lastIndexOf("."); index < 4; index++)
               {
                   zzz += "0";
               }
               ui->label_femaleX->setText(QString("%1").arg(zzz));
      //在msvc2010编译上会出现错误:9个QString::arg匹配和 mid右侧不是联合
//               QString strValue1 = QString("%1").arg(value1,4,10,'0').mid(0,6);
               QString strValue1 = QString("%1").arg(value1).mid(0,6);
               strValue1 = strValue1.startsWith("-") ?strValue1.mid(0,6):strValue1.mid(0,5);
               ui->label_femaleY->setText(strValue1);
           }else
           {
               ui->label_femaleX->setText("");
               ui->label_femaleY->setText("");
           }
           //移除图标已逝去的点,避免其占用内存
           ui->customPlot->graph(0)->removeDataBefore(key-8);
           ui->customPlot->graph(1)->removeDataBefore(key-8);
           //rescalevalue(vertical)axistofitthecurrentdata:
           //根据该图像最高点和最低点,缩放Y周
//           ui->customPlot->graph(0)->rescaleValueAxis();
//根据该图像最高点和最低点,缩放Y周以最后一个为主,所以这里只加入边界,true
//           ui->customPlot->graph(1)->rescaleValueAxis(true);
           _lastPointKey=key;
       }
   }
   //当显示的X轴超过8的时候,X坐标范围开始移动
   if(key > 8.0)
   {
       ui->customPlot->xAxis->setRange(key+0.01,8,Qt::AlignRight);
   }
   ui->customPlot->replot();
 
   //计算每秒的帧数
   static double lastFpsKey;
   static int frameCount;
   ++frameCount;
   //取2秒的平衡均值
   if(key-lastFpsKey > 2)
   {
       //设置状态栏显示FPS
       ui->statusBar->showMessage(
             QString("%1FPS")
             .arg(frameCount/(key-lastFpsKey), 0, 'f', 0));
       lastFpsKey = key;
       frameCount = 0;
   }
}

QCustomPlot官方范例

QCustomPlot提供了4个例程,这里初入手的特别注意范例plot-examples,其包含了多种效果,修改代码的数字实现不同的demo,如何修改如下图:

Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

原博主博客地址:长沙红胖子_长沙红胖子网络科技有限公司_CSDN博客
原博主博客导航:红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…_长沙红胖子-CSDN博客
本文章博客地址:Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用_长沙红胖子-CSDN博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181040.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • latex 公式如何换行

    latex 公式如何换行1、如图所示,我们先写个长公式。2、可以看到,公式没有自动换行,而是跨过了一栏。3、如图所示,在公式上下两端加上split。同时使用\\指明换行的位置。4、如图所示,公式实现了自动换行。5、大家选择换行的位置也很重要。如图所示,选择该处换行6、得到的效果就非常糟糕。承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。…

  • 自定义一个注解来获取数据库的链接

    自定义一个注解来获取数据库的链接

  • python中imread什么意思_imwrite函数

    python中imread什么意思_imwrite函数Python中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释

    2022年10月14日
  • 在线更换背景网站(白色背景换为蓝色背景证件照)[通俗易懂]

    在线更换背景网站(白色背景换为蓝色背景证件照)

  • 怎么新建pytest的ini文件_python读取配置文件

    怎么新建pytest的ini文件_python读取配置文件前言pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行查看pytest.ini的配置选项pytest-h找到以下

  • ziw文件用什么打开_html文件怎么打开

    ziw文件用什么打开_html文件怎么打开方法1:.ziw格式文件是为知笔记的文本文档,可以用为知笔记打开,直接去为知笔记官方网站下载就可以了,然后该软件的试用期是100天,不过它是经过邮箱注册的,并且没有验证邮箱这一步,所以你在100天之后可以换一个邮箱就可以了,比如之前用QQ邮箱,下次用163邮箱,另外它不会验证邮箱,所以你可以随意伪造一个邮箱登录方法2:直接把文件名后缀名改成.zip,然后解压,解压成功之后生成的是html网页,直接点击index.html就可以在浏览器中打开文件了,里面的图片不要删除,它们是index.html网页要用

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号