qcustomplot 用时间作为x坐标轴实时滚动显示,总是为0或者8点

大年三十了,祝大家新年快乐,万事如意!


这个鸟东西,刚接触还不是那么容易显示时间,csdn上一大堆基本都是错误的,我这一点心得分享下。

1、首先有2种类可以设置时间标签:

QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);    timeTicker->setTimeFormat("%h:%m:%s");
ui->widCapGraphics->xAxis->setTicker(timeTicker);

还有种:
QSharedPointer<QCPAxisTickerDateTime> timeTicker(new QCPAxisTickerDateTime);    timeTicker->setDateTimeFormat("hh:mm:ss");
ui->widCapGraphics->xAxis->setTicker(timeTicker);

注意,这2个鬼类的时间格式是不一样的,一个带%,一个是标准的qt

2、我们要知道图表刷新的周期单位,比如毫秒、秒、天,先用秒作单位,刷新周期是1秒:

初始化:

    // 设置x轴为时间    
    QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
    timeTicker->setTimeFormat("%h:%m:%s");

    //设置x轴有20个坐标,这个没用,要另一个策略函数配合
    //timeTicker->setTickCount(20);

    ui->widCapGraphics->xAxis->setTicker(timeTicker);
    ui->widCapGraphics->xAxis->setTickLabels(true);
    
    //设置x轴名称
    ui->widCapGraphics->xAxis->setLabel("时间");

添加数据的时候,x坐标一定是时间,如果是随意的点,那么就显示不正常了:

    // 声明时间获取变量,实际情况中,获取的是当前时间的总秒数    
    int nowtime = (QTime::currentTime().hour()*60+QTime::currentTime().minute())*60+QTime::currentTime().second();
    
    //设置x轴范围,实际情况设置的是5秒之内的数据
    ui->widCapGraphics->xAxis->setRange(nowtime-5,nowtime);

    mGraph1->addData(nowtime, qSin(mGraph1->dataCount()/50.0)+qSin(mGraph1->dataCount()/50.0/0.3843)*0.25);
    mGraph2->addData(nowtime, qCos(mGraph2->dataCount()/50.0)+qSin(mGraph2->dataCount()/50.0/0.4364)*0.15);

可以看到,x坐标是nowtime变量,如果初始化不显示时间,例如%m:%s只显示分钟,那么后面的hour()就不能要,只要minute*60+second就可以了。

3、如果我们用100ms的刷新周期,那就把单位换算成100ms吗?实际上不用,刷新只是慢一点,填数据是没有影响的,初始化:

    // 设置x轴为时间    
    QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
    timeTicker->setTimeFormat("%h:%m:%s.%z");


显示之:

    int nowtime = QTime::currentTime().msecsSinceStartOfDay(); // 当前时间总的毫秒数
    
    // 范围设为秒,不然晃得太快看不清,*0.001就是毫秒转成秒,然后从10秒以前的开始到现在为坐标范围
    ui->widCapGraphics->xAxis->setRange((nowtime-10000)*0.001,nowtime*0.001);
    
    // 添加数据的时候也是以秒为单位,所以要 *0.001
    mGraph1->addData(nowtime*0.001, qSin(mGraph1->dataCount()/50.0)+qSin(mGraph1->dataCount()/50.0/0.3843)*0.25);

    mGraph2->addData(nowtime*0.001, qCos(mGraph2->dataCount()/50.0)+qSin(mGraph2->dataCount()/50.0/0.4364)*0.15);


自行更改轴的范围和刷新周期,就可以爽爽的显示了


本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2024 labisart.com 版权所有 | 联系:labartwork@163.com