qt图形图像开发之高性能曲线图模块qcustomplot库详细使用方法与实例(支持动、静曲线图)-kb88凯时官网登录

时间:2020-05-26
阅读:
免费资源网 - https://freexyz.cn/

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 x(80000);
  qvector y(80000);
  for(int i = 0; igraph(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 time;
  qvector y;
	//模拟几个时间 .totime_t()是转换为 时间戳 从1970年到现在的秒数
  time<addgraph();
  //设置y轴范围
  p2->yaxis->setrange(0,20);
  
	//qcpaxistickerdatetime 时间坐标轴 必须要用 智能指针 
  qsharedpointer 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 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开发的知识请查看下面的相关链接

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图