How to reset the time on x-axis of a graph?



  • Hello All,
    I have two push buttons (Start time and Reset) and a widget (promoted to QCustomPlot) in my form.ui. The graph has time displayed on x-axis and it keeps on sliding towards left like real time data plot. When I press start time button, the value of x-axis sets to 0 and moves continuously based on the time elapsed. When I push the reset button the graph starts again from zero and x-axis keeps on sliding based on the time elapsed. When I press both the buttons for the first time it works good that is it starts the x-axis from zero. Till here it works good.
    After pressing the buttons for the first time, when I try for the second time none of the button sets the value on x-axis to zero and the graph keeps on displaying the time elapsed since the button is pressed for the first time. Below is my code, please guide me on this.

    My source code:

     void Form::on_pushButtonStartTime_clicked()
    {
        connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot())); // QTimer dataTimer declared in header file
        dataTimer.start(0);
    }
    
    void Form::on_pushButtonReset_clicked()
    {
        connect(&dataTimer, SIGNAL(timeout()), this, SLOT(resetTime()));
        dataTimer.start(0);
    
    }
    
    void Form::realtimeDataSlot()
    {
        static QTime time(QTime::currentTime());
        double key = time.elapsed()/1000.0; // time elapsed since start in seconds
        //  x-axis range scroll with the data 
        ui->customPlot->xAxis->setRange(key, 6, Qt::AlignRight);
        ui->customPlot->replot();
    }
    
    void Form::resetTime()
    {
        static QTime time(QTime::currentTime());
        double key=time.elapsed()/1000.0;
       
        ui->customPlot->xAxis->setRange(key, 6, Qt::AlignRight);
        ui->customPlot->replot();
    }
    

    Can anyone please guide me on why the above code works only for the first time and not for the consecutive pressing of the buttons.

    Thank you for your time and knowledge.





  • I found the solution :)



  • @VRonin Thank you for the reply. I found the solution but I didn't use QElapsedTimer.



  • Could you share your solution so people googling the problem in the future will be able to find the answer



  • Solution to my problem -

    1. I defined time as global variable and not local variable (as per the above code).
    2. In the slot definition of push buttons I started the code with time.start() which is missing in the code above.

    And it works...



  • For future readers:
    I still suggest using QElapsedTimer as a member variable and calling start() to reset it


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.