本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。