Solved How to reset the time on x-axis of a graph?
-
Could you share your solution so people googling the problem in the future will be able to find the answer
-
Solution to my problem -
- I defined time as global variable and not local variable (as per the above code).
- 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 -
This post is deleted! -
@VRonin I have the same problem, I'm trying to use QElapsedTimer with QChart, can you help me to do that please. This is my code :
classe.cpp
void MaClasse::updateChart(){ ElapsedTimer .start(); //global variable chart_1->chart()->axes(Qt::Horizontal).back()->setMin(ElapsedTimer .elapsed()); chart_1->chart()->axes(Qt::Horizontal).back()->setMax(ElapsedTimer .elapsed()+10); chart_1->series()[0].serie->replace(buffer_0); QApplication::processEvents(); }
-
What is not working?
-
@vronin My code note working
-
@halima said in How to reset the time on x-axis of a graph?:
My code note working
That's clear.
What EXACTLY is not working? -
@jsulm The max of XAxis is always 09:33:18 it's not moving when a new Data added.
This is my current code : (this function is called with a Timer every 200ms)QVector<QPointF> m_buffer = chart_1->series()[0].serie->pointsVector();//currentSerie.serie->pointsVector() ; if(m_buffer.length() > 2000){ m_buffer.remove(0); } ElapsedTimer .start(); //global variable chart_1->chart()->axes(Qt::Horizontal).back()->setMin(ElapsedTimer .elapsed()); chart_1->chart()->axes(Qt::Horizontal).back()->setMax(ElapsedTimer .elapsed()+10); m_buffer.append(QPointF(QDateTime::currentDateTime().toMSecsSinceEpoch(), qrand() % ((10 + 1) - 1) + 1)); chart_1->series()[0].serie->replace(m_buffer); QApplication::processEvents();
-
@halima said in How to reset the time on x-axis of a graph?:
void MaClasse::updateChart(){
ElapsedTimer .start();Why do you start the timer here?!
-
I'm using two timers :
//first timer to execute slot QTimer *timer connect(timer,&QTimer::timeout,this,&CL_SubWin_Chart::updateChart); timer->start(200); //second timer to update XAxis void MaClasse::updateChart(){ QElapsedTimer ElapsedTimer; ElapsedTimer .start(); chart_1->chart()->axes(Qt::Horizontal).back()->setMin(ElapsedTimer .elapsed()); chart_1->chart()->axes(Qt::Horizontal).back()->setMax(ElapsedTimer .elapsed()+10); ... }
But the xAxis not move!
-
@halima But why do you need this ElapsedTimer which you start inside updateChart()?
You will always get more or less same value from elapsed() I think. -
@jsulm you're right it works without this timer but I do this to update xAxis values because I need to have a real time ploting .
The chart serie start like this :
The final Chart, New Data after09:58:56 is not displayed!
-
@halima I suggest to move
QElapsedTimer ElapsedTimer;
to your MaClasse (as member variable)
And this to the constructor:ElapsedTimer .start();
then it should work.
-
@jsulm i did this and it's still not working :(
//constructor MaClasse::MaClasse(){ ElapsedTimer .start(); } //slot void void MaClasse::updateChart(){ QVector<QPointF> m_buffer = chart_1->series()[0].serie->pointsVector(); if(m_buffer.length() > 2000){ m_buffer.remove(0); } chart_1->chart()->axes(Qt::Horizontal).back()->setMin(ElapsedTimer .elapsed()); chart_1->chart()->axes(Qt::Horizontal).back()->setMax(ElapsedTimer .elapsed()+10); m_buffer.append(QPointF(QDateTime::currentDateTime().toMSecsSinceEpoch(), qrand() % ((10 + 1) - 1) + 1)); chart_1->series()[0].serie->replace(m_buffer); QApplication::processEvents(); }
-