Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例(支持动、静曲线图)

Qt曲线图模块QCustomPlot库介绍

QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线、动态曲线、多重坐标曲线,柱状图,蜡烛图等

前段时间用QChart模块画图,一条曲线上面放8000条数据就会卡的不行必须要换个其他的控件,后来找到了曲线图模块QCustomplot库

这个库性能非常好,画曲线图折线图柱状图动态静态,放大缩小,都很好用,10w条数据量无压力秒画出来一点也不卡

下载地址

https://www.qcustomplot.com/index.php/download

里面分为

QCustomPlot 2和QCustomPlot 1我用的2这两个有一些函数的差异

下载解压以后我们只需要qcustomplot.h和qcustomplot.cpp

注意

pro 文件里面 写入 QT+= printsupport

动态效果

QCustomplot静态曲线图生成

//他继承QWidget 所以构造里面 放控件就会画到控件上
QCustomPlot *pCustomPlot = new QCustomPlot(ui->label);
//添加一条曲线
QCPGraph* pgraph = pCustomPlot->addGraph();
//给曲线准备数据 设置数据
  QVector<double> x(80000);
  QVector<double> y(80000);
  for(int i = 0; i<x.size();i++)
  {
    x[i] = i;
    if(i%2==0)
      y[i] = 10;
    else
      y[i] = 20;
  }

	//设置数据
  pCustomPlot->graph(0)->setData(x,y);
	//设置Y轴范围
  pCustomPlot->yAxis->setRange(0,30);
	//x轴名字
  pCustomPlot->xAxis->setLabel("X");
  //Y轴名字
  pCustomPlot->yAxis->setLabel("Y");
	//设置大小
  pCustomPlot->resize(ui->label->width(),ui->label->height());
	//可以进行鼠标位置 放大缩小 拖拽 放大缩小坐标系!!!功能非常强大
  pCustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
	//重绘 每次改变完以后都要调用这个进行重新绘制
  pCustomPlot->replot();

运行效果如下:

时间为坐标轴的静曲线图

大致差不多 区别在于x轴改为时间

  QCustomPlot* p2 = new QCustomPlot(ui->label_2);
  QVector<double> time;
  QVector<double> y;
	//模拟几个时间 .toTime_t()是转换为 时间戳 从1970年到现在的秒数
  time<<QDateTime::fromString("2019-01-15 17:08:23","yyyy-MM-dd hh:mm:ss").toTime_t();
  time<<QDateTime::fromString("2019-01-25 17:08:23","yyyy-MM-dd hh:mm:ss").toTime_t();
  time<<QDateTime::fromString("2019-02-15 17:08:23","yyyy-MM-dd hh:mm:ss").toTime_t();
  time<<QDateTime::fromString("2019-02-25 17:08:23","yyyy-MM-dd hh:mm:ss").toTime_t();
  time<<QDateTime::fromString("2019-03-27 13:08:23","yyyy-MM-dd hh:mm:ss").toTime_t();
  y<<5<<15<<5<<15<<5;

	//增加一条线
  p2->addGraph();
  //设置Y轴范围
  p2->yAxis->setRange(0,20);

	//QCPAxisTickerDateTime 时间坐标轴 必须要用 智能指针
  QSharedPointer<QCPAxisTickerDateTime> timer(new QCPAxisTickerDateTime);
	//设置时间格式
  timer->setDateTimeFormat("yyyy-MM-dd");
  //设置时间轴 一共几格
  //timer->setTickCount(6);
  //设置label 旋转30° 横着显示可能显示不全
  p2->xAxis->setTickLabelRotation(30);
  // timer->setTickStepStrategy(QCPAxisTicker::tssMeetTickCount);
	//设置坐标轴
  p2->xAxis->setTicker(timer);
  p2->xAxis->setRange(time.at(0),time.at(4));
  p2->graph(0)->setData(time,y);
  p2->resize(ui->label_2->width(),ui->label_2->height());
   p2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);

运行效果如下:

QCustomplot动态曲线图生成

下图动态曲线是我用传感器采集的,大家可以用一些随机数据来测试

假设图像只显示10个点 第11个点将会把第一个点挤出去 就是一个vector 出栈入栈 里面一直保持10个数据

		//QVector<double> sx_vec,xAxis_vec 存放数据的容器

		//m_chartPoint_counter 计数器 一直增加 来一条数据增加一下 控制x轴前进 实现动态效果

		//这时容器里面还没10个点 所有一直向里面存
    if(m_chartPoint_counter < 10)
    {

      sx_vec.append(sx_);
      xAxis_vec.append(m_chartPoint_counter);

			//设置范围正好 能显示当前点
      sx_plot->xAxis->setRange(0,xAxis_vec.at(xAxis_vec.size()-1));

    }
    else
    {
    	//容器数据现在是正好10个 把第一个出栈 把第11个入栈 正好还是10个数据
      sx_vec.removeFirst();
      xAxis_vec.removeFirst();

			//入栈
      xAxis_vec.append(m_chartPoint_counter);
      sx_vec.append(sx_);
			//设置范围正好 能显示当前点
      sx_plot->xAxis->setRange(xAxis_vec.at(0),xAxis_vec.at(
                     xAxis_vec.size()-1));
    }
		//设置Y轴坐标系 自动缩放以正常显示所有的数据
    sx_plot->yAxis->rescale(true);
  	//设置数据
    sx_plot->graph()->setData(xAxis_vec,sx_vec);
		//重绘制
    sx_plot->replot();
	//这里必须要一直增加 如果增加到10就不增加 效果就是第10个点一直变化 不会出现动态效果
	m_chartPoint_counter++;

图像数据清空

//图像数据清空
QCPGraph* thresholdY_line;
thresholdY_line->data().data()->clear();

这里只是介绍一些基本的功能 ,一些强大的功能 在 下载的examples里有

本文主要讲解了Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例,更多关于QT开发的知识请查看下面的相关链接

(0)

相关推荐

  • Qt股票组件之自选股列表拖拽、右键常用菜单功能的实现

    一.开头嘴一嘴 本文带领大家来看看自选股列表的实现. 如果有需要的朋友可以加我好友,有偿提供源码.或者也可以进一步提供功能定制 封装的控件,或者demo都是没有样式的,所以看着会比较丑一些,不过加样式也是分分钟...这里咱可以先看功能,需要即可定制 本篇文章的自选股和大多数炒股软件一样,每一条自选都是支持拖拽的,拖拽时鼠标会跟随一个拖拽映像,并且鼠标移动时,会有拖拽提示,告知我们鼠标释放时拖拽项将会被插入到哪个位置.除过拖拽之外,自选股列表还支持右键菜单,都是一样常用的操作. 右键菜单包括置顶.

  • Qt自定义表头实现过滤功能的方法

    1. 写在前面 过滤功能源自项目上交互优化用户体验,在表头添加过滤符号实现过滤,替换以往在表格上方占用一行过滤项进行过滤. 2. 过滤提示 过滤提示就是三态图标(normal,hover,press).这三种状态的实现通过鼠标移动事件和鼠标点击事件来实现.具体实现如下:   1)hover状态在鼠标移动事件中实现 void CFilterHeaderView::mouseMoveEvent(QMouseEvent *e) { m_hover = logicalIndexAt(e->pos());

  • Qt 使用Poppler实现pdf阅读器的示例代码

    开发环境 Qt5.5.1.Qt Creator 3.5.1 Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的. 需要用到Poppler开源库,下载地址如下 https://poppler.freedesktop.org/ 如果只是要在window的gcc下运行的话,可以下载已经编译好的库 https://sourceforge.net/projects/poppler-win32/ 注意:这个是MinGW版本的Qt,也就是运行在GCC环境下的库,里面只包含 *.dll 和 *.

  • Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等.只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用. QCustomPlot官网:   http://www.qcustomplot.com/ QCustomPlot下载地址:   http://www.qcustomplot.com/index.

  • 如何为Qt视图中的文字实现彩虹渐变效果

    前言 将view中的文本内容用自定义的颜色显示是一种十分常见的需求.今天我们稍微改变些"花样".下面话不多说了,来一起看看详细的介绍吧 需求定义 我们的需求很简单,现在有一些在view中的text内容需要使用彩色显示,而且不使用单一的一种颜色,而是多种颜色渐变实现的彩虹效果. 文字描述可能比较抽象,所以我们先给出预想的效果图: 现在让我们想办法实现图中的效果. 需求分析 好在Qt的Model/View机制对于用户自定义的外观控制提供了极为丰富的支持,因此我们可以轻松地实现许多独特的显示

  • Qt实现保存、浏览、预览、打印功能的示例代码

    Qt提供了以文本.图片.HTML等方式来实现对文档的操作,主要用到了QPrinter类和QPainter类,用到了QFileDialog文件窗口.QPrintPreviewDialog预览窗口类和QPrintDialog打印窗口类,Qt5也提供了QPdfWriter类来实现对pdf的操作,这里并不包括打开pdf文件,Qt没有提供任何方法来直接像文件浏览器一样打开pdf文件,可以用第三方库来实现. 这里采用了图片的方式来实现保存.预览和打印,其实 三个功能基本上一样. 1.保存PDF (1)保存某

  • Qt学习笔记之QPalette调色板类

    QPalette通过获取控件或窗口的调色板对象(palette)对该控件或窗口进行色彩设置 可设置该widget不同状态的色彩(ColorGroup): QPalette::Active      获得焦点的状态下 QPalette::inactive   未获得焦点的状态下 QPalette::Disable    不可用的状态下 设置不同部位的颜色(ColorRole): QPalette::Window     对窗体的背景颜色进行设置 QPalette::WindowText     对

  • Qt实现闹钟小程序

    本文实例为大家分享了Qt之闹钟小程序的具体代码,供大家参考,具体内容如下 -首先 首先我们利用Qt的designer 设计好我们需要的闹钟界面,设计界面如下图: 其次我们来分别利用信号分别完成他们各自的槽函数 在mainwindow.h中,我们定义了下面这些私有成员变量,如下: / mainwindow.h文件/** #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimeEdit&g

  • Qt学习教程之对话框消失动画效果

    一.效果展示 最近做了一个提示框消失的功能,觉着挺有意思,以前一直以为Qt子窗口不能做淡出效果,其实Qt的淡出功能已经帮我们封装好了,我们仅仅只需要几行代码就可以做出酷炫的窗口关闭效果,写此篇文章的时候,我特意浏览了下之前写的两篇文章(QPainterPath 不规则提示框,QPainterPath 不规则提示框(二)),现在回想起来那会儿确实知之甚少,关于顶层窗口不能做圆角,其实帮助文档里已经说的很明确,解决办法有多种,一种是重写paintEvent函数,另一种是把widget包装一层,本篇文

  • Qt学习教程之表格控件蚂蚁线详解

    一.蚂蚁线 摘自互动百科:在图像影像软件中表示选区的动态虚线,因为虚线闪烁的样子像是一群蚂蚁在跑,所以俗称蚂蚁线.在Poshop,After Effect等软件中比较常见. 背景:用过excel的同学都知道,当对单元格进行复制时,单元格周围就会出现一个跑动的矩形框,这个矩形框就被称为蚂蚁线.通过设置蚂蚁线的线型和调整控件有效刷新次数我们可以得到不同的跑动效果,这是一个非常有意思的现象. 本文将给大家详细介绍关于Qt表格控件蚂蚁线的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的

随机推荐