QCustomPlot系列

摘要:
QCustomPlot支持带有值、日期和时间的X轴。我们不谈价值,只说:1.日期。2.时间。1.日期是X轴,可以显示:年-月-日-小时-分钟-秒毫秒。X轴的数据是从1970-01-0100:00:00到当前时间的总秒数。有关“总秒数”,请参阅:qint64QDateTime::currentSecsSinceEpoch()。如果要在X轴上显示毫秒数,则只能使用小数点后的X值。可以通过将“Total Milliseconds”:qint64QDateTime::currentMSecsSinceEpoch()除以1000.0f来设置X值。

先看两个小知识:
1、显示数据散点:ui->customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//散点

2、连接散点的方式:customPlot->graph(0)->setLineStyle(QCPGraph::lsStepLeft);
有好几种:折线连接、左端点阶梯连接、右端点阶梯连接等。

QCustomPlot支持以数值、日期、时间做X轴。

数值就不说了,只讲一下:1、日期,2、时间

1、日期做X轴,可以显示出:年-月-日-时-分-秒-毫秒, 

X轴的数据以1970-01-01 00:00:00至当前时间的总秒数,关于“总秒数”可参考:qint64 QDateTime::currentSecsSinceEpoch()。
如果想在X轴显示出毫秒数,那么只能把X值用到小数位,可以用 “总毫秒数”:qint64  QDateTime::currentMSecsSinceEpoch() 除以1000.0f来设置X值。

例如:

若某个点的X值=0,则该点在图中的X坐标会显示为1970-01-01 00:00:00
若某个点的X值=5,则该点在图中的X坐标会显示为1970-01-01 00:00:05
若某个点的X值=3601,则该点在图中的X坐标会显示为1970-01-01 01:00:01   (3601秒为1个小时零1秒)
若某个点的X值=1596415566,则该点在图中的X坐标会显示为2020-08-03 08:46:06

示例:

QVector<double> time(200), value(200);
 
for(int i = 0; i < time.count(); i++)
 
{
 
time[i] = QDateTime::currentSecsSinceEpoch() + i;//方法1:以此刻的时间做X轴(总秒数),一秒一个值
 
//time[i] = QDateTime::currentMsecsSinceEpoch() / 1000.0 + i;//方法2
 
value[i] = qrand() % 10 - 5;//[-5, 5]随机数做y值
 
}//生成模拟数据
 
 
 
ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);//添加鼠标拖放支持、滚轮缩放支持
 
ui->customPlot_2->addGraph();
 
ui->customPlot_2->graph(0)->setData(time, value);//设置数据源
 
ui->customPlot_2->graph(0)->rescaleAxes();
 
 
 
QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);//日期做X轴
 
dateTicker->setDateTimeFormat("yy-MM-dd hh:mm:ss");//日期格式(可参考QDateTime::fromString()函数)
 
ui->customPlot_2->xAxis->setTicker(dateTicker);//设置X轴为时间轴
 QCustomPlot系列第1张

2、时间做X轴

时间做X轴可以显示:日-时-分-秒-毫秒,举几个例子:
X值为0时,代表第0天0时0分0秒0毫秒,
X值为1时,代表第0天0时0分1秒0毫秒
X值为2.389时,代表第0天0时0分2秒389毫秒
X值为3601时,代表第0天1时0分1秒0毫秒
以此类推。

 
#pragma execution_character_set("utf-8")//避免中文乱码
 
 
 
QVector<double> time(20), value(20);
 
for(int i = 0; i < time.count(); i++)
 
{
 
time[i] = 3600 * 24 * 3 + 3600 * 2 + i * 0.1;//模拟从第3天2点整开始,每100ms一个数
 
value[i] = qrand() % 10 - 5;
 
}
 
ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
 
 
 
ui->customPlot_2->addGraph();
 
ui->customPlot_2->graph(0)->setData(time, value);
 
ui->customPlot_2->graph(0)->rescaleAxes();
 
ui->customPlot_2->graph(0)->setLineStyle(QCPGraph::lsStepLeft);//左端点阶梯线样式
 
ui->customPlot_2->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//显示散点
 
 
 
QSharedPointer<QCPAxisTickerTime> dateTicker(new QCPAxisTickerTime);
 
dateTicker->setTimeFormat("%h:%m:%s.%z
第%d天");//时间格式,参考本函数的帮助文档
 
ui->customPlot_2->xAxis->setTicker(dateTicker);

QCustomPlot系列第2张

 

 https://blog.csdn.net/qq_31073871/article/details/90111092

免责声明:文章转载自《QCustomPlot系列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java多线程 -- ConcurrentHashMap 锁分段 机制OpenCV截取图像的某一区域下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

element-ui的el-table和el-form嵌套使用表单校验

在表单中嵌套和使用表单来验证表单是el表自动获取的后台数据,每行都有el输入验证,因此一条规则的规则不能匹配每行。因此,如果动态属性和规则规则需要如下,则验证警报阈值是无用的。上述代码˂el-table:data=“...

echarts折线图 鼠标移入改变小点显示样式

=undefined){res+=nameList[i].seriesName+':'+nameList[i].data+'%'+''}}res=res.split;returnres[0]+''+res[1];}}echarts折线图的鼠标移动上去小点显示样式修改tooltip:{trigger:'axis',formatter:function{varr...

Sublime Text 格式化JSON-pretty json

输入prettyjson回车,稍等片刻即可完成安装。...

fiddler抓包+雷电模拟器 完成手机app抓包的配置

找到系统应用,点击设置,点击无线网络WLAN—˃左键常按点击已连接网络—˃修改网络鼠标左键长按在桌面找到下面这个文件之后双击打开上面证书弄完之后。可以说本机已经安装过证书了,如果你能在模拟器上找到这个证书就不用将这个证书再拉入模拟器了在模拟器中打开系统应用—˃设置—˃安全—˃从SD卡安装。找到FiddlerRoot.cer文件,按提示导入即可,注意在此过程需...

Windows系统下MySQL添加到系统服务方法(mysql解压版)

您可能感兴趣的文章:Windows7中配置安装MySQL5.6解压缩版windows下安装、卸载mysql服务的方法Mysql5.7.11在windows10上的安装与配置(解压版)在Windows10上安装解压缩版MySql(推荐)Windows安装MySQL5.7.18解压版的教程windowsserver2016安装MySQL5.7.19解压缩版教程详...

SQL 2008维护计划不执行的问题

平台环境;首先,安装了WINDOWS 2008,但没有升级到AD。安装了sql2008之后,AD被升级。无法确定所有者WWW-4410C397505Administrator是否具有服务器访问权限(原因:无法获取有关WindowsNT组/用户“WWW-440C397505Administrator”的信息,错误代码为0x534。[SQLSTATE42000]...