动态曲线显示2021-09-09

动态曲线显示

动态曲线显示主要有横坐标轴为点和时间两种情况,横坐标轴为点时,有曲线动坐标轴固定和曲线动坐标轴随动两种情况;横坐标为时间时,曲线随时间动。

1.曲线动坐标轴固定

if(isVisible()){
            QVector<QPointF>oldPoints1;
            QVector<QPointF>points1;
            oldPoints1=splineSeries1->pointsVector();
            //            qDebug()<<"oldPoints:"<<oldPoints.size();
            int count = oldPoints1.size();

            if(count < maxX){  //小于一个显示周期(180)时
                for(int i=0; i<size; i=i+size){
                    oldPoints1.append(QPointF(count+i, data[box1->currentIndex()].at(count+i).y()));
                }
                if(stop1_flag){     //当按下暂停键时,绘图中止
                    splineSeries1->replace(oldPoints1);
                }
            }
            else{//显示区域大于一个周期时
                for(int k=size; k<count; ++k)     //添加不足的点数
                {
                    points1.append(QPointF(k-size , oldPoints1.at(k).y()));//坐标不变,数据前移size个单位,即移除最前方size个点数
                }
                qint64 sizePoints = points1.count();     //当前剩余点数oldpoints-size
                for(int k=0; k<size; ++k)     //添加size个点数
                {
                    points1.append(QPointF(k+sizePoints,data[box1->currentIndex()].at(numberofcycle1%180 + k).y()));
                }
                if(stop1_flag){//控制曲线的移动与暂停
                    splineSeries1->replace(points1);
                }
                numberofcycle1 = numberofcycle1 + size;       //控制新添加数据在一个周期数据中的位置
            }
            if(numberofcycle1 ==180){
                numberofcycle1=0;//为避免数据过大,超过180则重置为零,因为坐标轴不动,所以重置为零不影响
            }
        }

2.曲线动坐标轴随动

if (event->timerId() == timerId) {
            int size = pointcount;   //刷新一次添加的点个个数,用于控制波形显示速度

            if(Num_of_Channel2 != box2->currentIndex()){
                splineSeries2->clear();
                numberofcycle2=0;
            }
            Num_of_Channel2=box2->currentIndex();     //待显示的通道数

            if(isVisible()){
                QVector<QPointF>oldPoints2;
                QVector<QPointF>points2;
                oldPoints2=splineSeries2->pointsVector();
                //            qDebug()<<"oldPoints:"<<oldPoints.size();
                int count2 = oldPoints2.size();

                if(count2 < maxX){  //小于一个显示周期时
                    for(int i=0; i<size; i=i+size){
                        oldPoints2.append(QPointF(count2+i, data[Num_of_Channel2].at(count2+i).y()));
                    }
                    splineSeries2->replace(oldPoints2);
                    chart2->axisX()->setRange(0,180);  //,低于一个周期时,设置X轴范围0-180
                }

                else{
                    for(int s=size;s<count2;++s) //将原数据整体前移size个
                    {
                        points2.append(QPointF(s-size+numberofcycle2,oldPoints2.at(s).y())); //替换数据用 移动数据用
                    }
                    qint64 sizePoints2 = points2.count();     //当前剩余点数oldpoints-size
                    for(int k=0;k<size;++k)     //添加不足的点数
                    {
                        points2.append(QPointF(k+sizePoints2+numberofcycle2,data[Num_of_Channel2].at(numberofcycle2 % 180+k).y()));
                    }
                    if(stop2_flag){
                    splineSeries2->replace(points2);//控制曲线的显示与暂停
                    chart2->axisX()->setRange(numberofcycle2+size,numberofcycle2+size+179);  //设置X轴范围
                    }
                    numberofcycle2=numberofcycle2+size;       //控制新添加数据在一个周期数据中的位置
                }
//                qDebug()<<"numberofcycle:"<<numberofcycle2;
            }
        }

3.曲线随时间动

QDateTime currentTime = QDateTime::currentDateTime();
        //设置坐标轴的线式范围
        chart3->axisX()->setMin(QDateTime::currentDateTime().addMSecs(-180*1));
        chart3->axisX()->setMax(QDateTime::currentDateTime().addMSecs(0));



        //增加新的点到曲线末尾
        double number = 0;
        qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
        number = qrand()%99;
        splineSeries3->append(currentTime.toMSecsSinceEpoch() , number);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值