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

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

本文主要介绍Qt graphics和images开发的高性能图形模块QCustomplot库(支持动态和静态图形)的详细使用方法和实例。有需要的可以参考一下。

Qt曲线图模块QCustomPlot库介绍

QCustomPlot是一个小的Qt绘图图标类,支持绘制静态曲线、动态曲线、多坐标曲线、条形图、蜡烛图等。

前段时间用QChart模块画了一张图。当8000条数据放到一条曲线上,就会卡住。我不得不改变其他的控制。后来我找到了图形模块的QCustomplot库。

这个库性能非常好。可以画曲线,线图,柱形图,动静态,放大缩小,都很好用。无压力画10w条数据一点都不卡。

下载地址

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

里面分为

我用的两个QCOSTOPLOT2和QCOSTOPLOT1有一些功能上的区别。

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

注意

在pro文件中写入QT=printsupport。

动力效应

QCustomplot静态曲线图生成

//他继承了QWidget,所以放在结构里面的控件会画在控件上。

QCustomPlot * pCustomPlot=new QCustomPlot(ui-label);

//添加曲线

qcp graph * p graph=pCustomPlot-add graph();

//为曲线准备数据设置数据。

QVectordouble x(80000);

QVectordouble y(80000);

for(int I=0;IX . size();我)

{

x[I]=I;

如果(i%2==0)

y[I]=10;

其他

y[I]=20;

}

//设置数据

pCustomPlot-graph(0)-setData(x,y);

//设置Y轴范围

pCustomPlot-yAxis-setRange(0,30);

//x轴名称

pCustomPlot-xAxis-set label(' X ');

//Y轴名称

pCustomPlot-ya xis-set label(' Y ');

//设置大小

pCustomPlot-resize(ui-label-width()、ui-label-height());

//可以放大缩小鼠标位置,拖拽,放大缩小坐标系!非常强大

pCustomPlot-set interactions(QCP:伊朗制图| QCP:伊朗制图);

//redraw this每次更改后重新绘制。

pCustomPlot-re plot();

操作效果如下:

时间为坐标轴的静曲线图

几乎不同的是X轴改成了时间。

QCustomPlot* p2=新QCustomPlot(ui-label _ 2);

QVectordouble time

QVectordouble y;

//模拟几次。toTime_t()是从1970年到现在的秒数,换算成时间戳。

time qdatetime:from string(' 2019-01-15 17:08:23 ',' yyyy-MM-dd hh:mm:ss ')。to time _ t();

time qdatetime:from string(' 2019-01-25 17:08:23 ',' yyyy-MM-dd hh:mm:ss ')。to time _ t();

time qdatetime:from string(' 2019-02-15 17:08:23 ',' yyyy-MM-dd hh:mm:ss ')。to time _ t();

time qdatetime:from string(' 2019-02-25 17:08:23 ',' yyyy-MM-dd hh:mm:ss ')。to time _ t();

time qdatetime:from string(' 2019-03-27 13:08:23 ',' yyyy-MM-dd hh:mm:ss ')。to time _ t();

y5155155

//添加一行

p2-add graph();

//设置Y轴范围

p2-yAxis-setRange(0,20);

//QCPAxisTickerDateTime时间轴必须使用智能指针。

QSharedPointerQCPAxisTickerDateTime定时器(新QCPAxisTickerDateTime);

//设置时间格式

timer-setDateTimeFormat(' yyyy-MM-DD ');

//时间轴有多少个方块?

//timer-setTickCount(6);

//将标签设置为水平旋转30可能会导致显示不完整。

p2-xAxis-setticklabelrrotation(30);

//timer-settickstepractice(QCPAxisTicker:tssmeetickcount);

//设置坐标轴

p2-xAxis-setTicker(定时器);

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:伊兰格德拉格| QCP:伊兰格祖姆);

操作效果如下:

QCustomplot动态曲线图生成

下面的动态曲线是我的传感器采集的。可以用一些随机数据来检验。

假设图像只显示10个点,第11个点会挤掉第一个点,也就是一个向量会在堆栈中保留10个数据。

//QVectorDoubleSX _ VEC,Xaxis _ VEC用于存储数据的容器

//m_chartPoint_counter计数器不断增加。添加一段数据控制X轴前进,实现动态效果。

//此时容器中没有10个点,所以全部保存在容器中。

if(m_chartPoint_counter 10)

{

sx _ vec . append(sx _);

xAxis _ vec . append(m _ chart point _ counter);

//将范围设置为仅显示当前点。

sx_plot-xAxis-setRange(0,xAxis _ vec . at(xAxis _ vec . size()-1));

}

其他

{

//现在容器数据正好是10吗?将第一个放入堆栈,将第11个放入堆栈,或者正好10个数据?

sx _ vec . remove first();

xAxis _ vec . remove first();

//堆栈

xAxis _ vec . append(m _ chart point _ counter);

sx _ vec . append(sx _);

//将范围设置为仅显示当前点。

sx _ plot-xAxis-set range(xAxis_vec.at(0),xAxis _ vec . at(

xAxis _ vec . size()-1));

}

//设置Y轴坐标系自动缩放,正常显示所有数据。

sx _ plot-ya xis-rescale(true);

//设置数据

sx _ plot-graph()-setData(xAxis _ vec,sx _ vec);

//重绘

sx _ plot-re plot();

//这里要一直增加。如果增加到10,效果不会增加,也就是第10个点保持变化,不会有动态效果。

m _ chartPoint _ counter

图像数据清空

//图像数据被清除。

QCPGraph * thresholdY _ line

thresholdY_line-data()。data()-clear();

这里只是一些基本的函数,一些强大的函数在下载的例子里都有。

本文主要讲解了QCustomplot库的详细用法和示例,QCustomplot库是一个用于QT图形图像开发的高性能图形模块。有关Qt开发的更多信息,请参考下面的相关链接。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: