Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Scroll chart, when new data come
QtWS25 Last Chance

Scroll chart, when new data come

Scheduled Pinned Locked Moved Unsolved General and Desktop
qt5chartscrollbar
7 Posts 2 Posters 1.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    deleted286
    wrote on 26 Jan 2021, 11:14 last edited by
    #1

    Hi. I have a chart. I want to scroll my chart, when new datas come. How can i do it?
    I want to set range according to my datas which are txt file.

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QFile>
    #include <QtCharts/QLineSeries>
    #include <QTimer>
    #include <QTextStream>
    #include <QtCharts>
    #include <QChart>
    #include <QString>
    #include <QStringList>
    #include <QtCore/QDateTime>
    #include <QtCharts/QDateTimeAxis>
    #include <QQueue>
    #include <QSplineSeries>
    
    QT_CHARTS_USE_NAMESPACE
    using namespace QtCharts;
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        CreateChart();
        ReadFile();
        ReadFile2();
        ReadFile3();
        ReadFile4();
    
        connect(timer, SIGNAL(timeout()), SLOT(Timer_Slot()));
        timer->setInterval(500);
        timer->start();
    
        connect(timer2, SIGNAL(timeout()), SLOT(Timer_Slot2()));
        timer2->setInterval(500);
        timer2->start();
    
        connect(timer3, SIGNAL(timeout()), SLOT(Timer_Slot3()));
        timer3->setInterval(500);
        timer3->start();
    
        connect(timer4, SIGNAL(timeout()), SLOT(Timer_Slot4()));
        timer4->setInterval(500);
        timer4->start();
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::Timer_Slot()
    {
        static float q_x=0;
        if(!queue.isEmpty())
        {
           double num=queue.dequeue();
           q_x += 0.1;
           series->append(q_x, num);
           chart->update();
           
           qDebug() << q_x << num;
         }
    }
    
    void MainWindow::Timer_Slot2()
    {
        static float q_x2=0;
        if(!queue2.isEmpty())
        {
           double num2=queue2.dequeue();
           q_x2 += 0.1;
           series2->append(q_x2, num2);
           chart->update();
           qDebug() << q_x2 << num2;
         }
    }
    void MainWindow::Timer_Slot3()
    {
        static float q_x3=0;
        if(!queue3.isEmpty())
        {
           double num3=queue3.dequeue();
           q_x3 += 0.1;
           series3->append(q_x3, num3);
           chart->update();
           qDebug() << q_x3 << num3;
         }
    }
    
    void MainWindow::Timer_Slot4()
    {
        static float q_x4=0;
        if(!queue4.isEmpty())
        {
           double num4=queue4.dequeue();
           q_x4 += 0.1;
           series4->append(q_x4, num4);
           chart->update();
           qDebug() << q_x4 << num4;
         }
    }
    void MainWindow::ReadFile()
    {
        QFile file("/home/ilknur/Chart/Data1.txt");
        if(file.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file);
            while (!in.atEnd()) {
                QString line = in.readLine();
                QStringList list = line.split(QLatin1Char(' '), QString::SkipEmptyParts);
                for (const QString &entry : list)
                {
                    double num = entry.toDouble();
                    qDebug() << num;
                    queue.enqueue(num);
                }
            }
        }
    }
    
    void MainWindow::ReadFile2()
    {
        QFile file2("/home/ilknur/Chart/Data2.txt");
        if(file2.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file2);
            while (!in.atEnd()) {
                QString line2 = in.readLine();
                QStringList list2 = line2.split(QLatin1Char(' '), QString::SkipEmptyParts);
                for (const QString &entry : list2)
                {
                    double num2 = entry.toDouble();
                    qDebug() << num2;
                    queue2.enqueue(num2);
                }
            }
        }
    }
    void MainWindow::ReadFile3()
    {
        QFile file3("/home/ilknur/Chart/Data3.txt");
        if(file3.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file3);
            while (!in.atEnd()) {
                QString line3 = in.readLine();
                QStringList list3 = line3.split(QLatin1Char(' '), QString::SkipEmptyParts);
                for (const QString &entry : list3)
                {
                    double num3 = entry.toDouble();
                    qDebug() << num3;
                    queue3.enqueue(num3);
                }
            }
        }
    }
    void MainWindow::ReadFile4()
    {
        QFile file4("/home/ilknur/Chart/Data4.txt");
        if(file4.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file4);
            while (!in.atEnd()) {
                QString line4 = in.readLine();
                QStringList list4 = line4.split(QLatin1Char(' '), QString::SkipEmptyParts);
                for (const QString &entry : list4)
                {
                    double num4 = entry.toDouble();
                    qDebug() << num4;
                    queue4.enqueue(num4);
                }
            }
        }
    }
    
    void MainWindow::CreateChart()
    {
            QChart *chart = new QChart();
            chart->addSeries(series);
            chart->addSeries(series2);
            chart->addSeries(series3);
            chart->addSeries(series4);
            qDebug()<< series;
            qDebug()<< series2;
            qDebug()<< series3;
            qDebug() << "bu dördüncü seri"<< series4;
            QPen green(Qt::red);
            green.setWidth(2);
            series->setPen(green);
            series2->setColor("green");
            series3->setColor("blue");
            series4->setColor("black");
            chart->legend()->hide();
            chart->setTitle("MyChart");
            chart->setAnimationOptions(QChart::AllAnimations);
    
            QValueAxis *axisX=new QValueAxis;
            axisX->setTickCount(5);
            axisX->setRange(0,1);
            chart->addAxis(axisX, Qt::AlignBottom);
            series->attachAxis(axisX);
            series2->attachAxis(axisX);
            series3->attachAxis(axisX);
            series4->attachAxis(axisX);
    
            QValueAxis *axisY = new QValueAxis;
            axisY->setTickCount(5);
            axisY->setRange(0,1);
            chart->addAxis(axisY, Qt::AlignLeft);
            series->attachAxis(axisY);
            series2->attachAxis(axisY);
            series3->attachAxis(axisY);
            series4->attachAxis(axisY);
    
            QChartView *chartView = new QChartView(chart);
            chartView->setRenderHint(QPainter::Antialiasing);
            this->setCentralWidget(chartView);
    }
    
    P 1 Reply Last reply 26 Jan 2021, 11:39
    0
    • D deleted286
      26 Jan 2021, 11:14

      Hi. I have a chart. I want to scroll my chart, when new datas come. How can i do it?
      I want to set range according to my datas which are txt file.

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      #include <QFile>
      #include <QtCharts/QLineSeries>
      #include <QTimer>
      #include <QTextStream>
      #include <QtCharts>
      #include <QChart>
      #include <QString>
      #include <QStringList>
      #include <QtCore/QDateTime>
      #include <QtCharts/QDateTimeAxis>
      #include <QQueue>
      #include <QSplineSeries>
      
      QT_CHARTS_USE_NAMESPACE
      using namespace QtCharts;
      
      MainWindow::MainWindow(QWidget *parent)
          : QMainWindow(parent)
          , ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          CreateChart();
          ReadFile();
          ReadFile2();
          ReadFile3();
          ReadFile4();
      
          connect(timer, SIGNAL(timeout()), SLOT(Timer_Slot()));
          timer->setInterval(500);
          timer->start();
      
          connect(timer2, SIGNAL(timeout()), SLOT(Timer_Slot2()));
          timer2->setInterval(500);
          timer2->start();
      
          connect(timer3, SIGNAL(timeout()), SLOT(Timer_Slot3()));
          timer3->setInterval(500);
          timer3->start();
      
          connect(timer4, SIGNAL(timeout()), SLOT(Timer_Slot4()));
          timer4->setInterval(500);
          timer4->start();
      }
      
      MainWindow::~MainWindow()
      {
          delete ui;
      }
      
      void MainWindow::Timer_Slot()
      {
          static float q_x=0;
          if(!queue.isEmpty())
          {
             double num=queue.dequeue();
             q_x += 0.1;
             series->append(q_x, num);
             chart->update();
             
             qDebug() << q_x << num;
           }
      }
      
      void MainWindow::Timer_Slot2()
      {
          static float q_x2=0;
          if(!queue2.isEmpty())
          {
             double num2=queue2.dequeue();
             q_x2 += 0.1;
             series2->append(q_x2, num2);
             chart->update();
             qDebug() << q_x2 << num2;
           }
      }
      void MainWindow::Timer_Slot3()
      {
          static float q_x3=0;
          if(!queue3.isEmpty())
          {
             double num3=queue3.dequeue();
             q_x3 += 0.1;
             series3->append(q_x3, num3);
             chart->update();
             qDebug() << q_x3 << num3;
           }
      }
      
      void MainWindow::Timer_Slot4()
      {
          static float q_x4=0;
          if(!queue4.isEmpty())
          {
             double num4=queue4.dequeue();
             q_x4 += 0.1;
             series4->append(q_x4, num4);
             chart->update();
             qDebug() << q_x4 << num4;
           }
      }
      void MainWindow::ReadFile()
      {
          QFile file("/home/ilknur/Chart/Data1.txt");
          if(file.open(QIODevice::ReadOnly))
          {
              QTextStream in(&file);
              while (!in.atEnd()) {
                  QString line = in.readLine();
                  QStringList list = line.split(QLatin1Char(' '), QString::SkipEmptyParts);
                  for (const QString &entry : list)
                  {
                      double num = entry.toDouble();
                      qDebug() << num;
                      queue.enqueue(num);
                  }
              }
          }
      }
      
      void MainWindow::ReadFile2()
      {
          QFile file2("/home/ilknur/Chart/Data2.txt");
          if(file2.open(QIODevice::ReadOnly))
          {
              QTextStream in(&file2);
              while (!in.atEnd()) {
                  QString line2 = in.readLine();
                  QStringList list2 = line2.split(QLatin1Char(' '), QString::SkipEmptyParts);
                  for (const QString &entry : list2)
                  {
                      double num2 = entry.toDouble();
                      qDebug() << num2;
                      queue2.enqueue(num2);
                  }
              }
          }
      }
      void MainWindow::ReadFile3()
      {
          QFile file3("/home/ilknur/Chart/Data3.txt");
          if(file3.open(QIODevice::ReadOnly))
          {
              QTextStream in(&file3);
              while (!in.atEnd()) {
                  QString line3 = in.readLine();
                  QStringList list3 = line3.split(QLatin1Char(' '), QString::SkipEmptyParts);
                  for (const QString &entry : list3)
                  {
                      double num3 = entry.toDouble();
                      qDebug() << num3;
                      queue3.enqueue(num3);
                  }
              }
          }
      }
      void MainWindow::ReadFile4()
      {
          QFile file4("/home/ilknur/Chart/Data4.txt");
          if(file4.open(QIODevice::ReadOnly))
          {
              QTextStream in(&file4);
              while (!in.atEnd()) {
                  QString line4 = in.readLine();
                  QStringList list4 = line4.split(QLatin1Char(' '), QString::SkipEmptyParts);
                  for (const QString &entry : list4)
                  {
                      double num4 = entry.toDouble();
                      qDebug() << num4;
                      queue4.enqueue(num4);
                  }
              }
          }
      }
      
      void MainWindow::CreateChart()
      {
              QChart *chart = new QChart();
              chart->addSeries(series);
              chart->addSeries(series2);
              chart->addSeries(series3);
              chart->addSeries(series4);
              qDebug()<< series;
              qDebug()<< series2;
              qDebug()<< series3;
              qDebug() << "bu dördüncü seri"<< series4;
              QPen green(Qt::red);
              green.setWidth(2);
              series->setPen(green);
              series2->setColor("green");
              series3->setColor("blue");
              series4->setColor("black");
              chart->legend()->hide();
              chart->setTitle("MyChart");
              chart->setAnimationOptions(QChart::AllAnimations);
      
              QValueAxis *axisX=new QValueAxis;
              axisX->setTickCount(5);
              axisX->setRange(0,1);
              chart->addAxis(axisX, Qt::AlignBottom);
              series->attachAxis(axisX);
              series2->attachAxis(axisX);
              series3->attachAxis(axisX);
              series4->attachAxis(axisX);
      
              QValueAxis *axisY = new QValueAxis;
              axisY->setTickCount(5);
              axisY->setRange(0,1);
              chart->addAxis(axisY, Qt::AlignLeft);
              series->attachAxis(axisY);
              series2->attachAxis(axisY);
              series3->attachAxis(axisY);
              series4->attachAxis(axisY);
      
              QChartView *chartView = new QChartView(chart);
              chartView->setRenderHint(QPainter::Antialiasing);
              this->setCentralWidget(chartView);
      }
      
      P Offline
      P Offline
      Pl45m4
      wrote on 26 Jan 2021, 11:39 last edited by
      #2

      @suslucoder said in Scroll chart, when new data come:

      void MainWindow::Timer_Slot()
      {
      static float q_x=0;
      if(!queue.isEmpty())
      {
      double num=queue.dequeue();
      q_x += 0.1;
      series->append(q_x, num);
      chart->update();

         qDebug() << q_x << num;
       }
      

      }

      void MainWindow::Timer_Slot2()
      {
      static float q_x2=0;
      if(!queue2.isEmpty())
      {
      double num2=queue2.dequeue();
      q_x2 += 0.1;
      series2->append(q_x2, num2);
      chart->update();
      qDebug() << q_x2 << num2;
      }
      }
      void MainWindow::Timer_Slot3()
      {
      static float q_x3=0;
      if(!queue3.isEmpty())
      {
      double num3=queue3.dequeue();
      q_x3 += 0.1;
      series3->append(q_x3, num3);
      chart->update();
      qDebug() << q_x3 << num3;
      }
      }

      void MainWindow::Timer_Slot4()
      {
      static float q_x4=0;
      if(!queue4.isEmpty())
      {
      double num4=queue4.dequeue();
      q_x4 += 0.1;
      series4->append(q_x4, num4);
      chart->update();
      qDebug() << q_x4 << num4;
      }
      }

      You don't have the same code four times here, right?! :)

      set range

      Here is the solution already (QAbstractAxis::setRange)


      If debugging is the process of removing software bugs, then programming must be the process of putting them in.

      ~E. W. Dijkstra

      D 1 Reply Last reply 26 Jan 2021, 11:46
      1
      • P Pl45m4
        26 Jan 2021, 11:39

        @suslucoder said in Scroll chart, when new data come:

        void MainWindow::Timer_Slot()
        {
        static float q_x=0;
        if(!queue.isEmpty())
        {
        double num=queue.dequeue();
        q_x += 0.1;
        series->append(q_x, num);
        chart->update();

           qDebug() << q_x << num;
         }
        

        }

        void MainWindow::Timer_Slot2()
        {
        static float q_x2=0;
        if(!queue2.isEmpty())
        {
        double num2=queue2.dequeue();
        q_x2 += 0.1;
        series2->append(q_x2, num2);
        chart->update();
        qDebug() << q_x2 << num2;
        }
        }
        void MainWindow::Timer_Slot3()
        {
        static float q_x3=0;
        if(!queue3.isEmpty())
        {
        double num3=queue3.dequeue();
        q_x3 += 0.1;
        series3->append(q_x3, num3);
        chart->update();
        qDebug() << q_x3 << num3;
        }
        }

        void MainWindow::Timer_Slot4()
        {
        static float q_x4=0;
        if(!queue4.isEmpty())
        {
        double num4=queue4.dequeue();
        q_x4 += 0.1;
        series4->append(q_x4, num4);
        chart->update();
        qDebug() << q_x4 << num4;
        }
        }

        You don't have the same code four times here, right?! :)

        set range

        Here is the solution already (QAbstractAxis::setRange)

        D Offline
        D Offline
        deleted286
        wrote on 26 Jan 2021, 11:46 last edited by
        #3

        @Pl45m4 How can i do it, writing the same code 4 times?

        P 1 Reply Last reply 26 Jan 2021, 11:58
        0
        • D deleted286
          26 Jan 2021, 11:46

          @Pl45m4 How can i do it, writing the same code 4 times?

          P Offline
          P Offline
          Pl45m4
          wrote on 26 Jan 2021, 11:58 last edited by Pl45m4
          #4

          @suslucoder

          One timer, one function to update all four data series.

          Or four timers, if you want to update them independently / stop one update interval. But then one function is still enough. You can connect all timers to one function and check inside this function which series are enabled and what to update.


          If debugging is the process of removing software bugs, then programming must be the process of putting them in.

          ~E. W. Dijkstra

          D 2 Replies Last reply 26 Jan 2021, 12:27
          2
          • P Pl45m4
            26 Jan 2021, 11:58

            @suslucoder

            One timer, one function to update all four data series.

            Or four timers, if you want to update them independently / stop one update interval. But then one function is still enough. You can connect all timers to one function and check inside this function which series are enabled and what to update.

            D Offline
            D Offline
            deleted286
            wrote on 26 Jan 2021, 12:27 last edited by
            #5

            @Pl45m4 Thank you. I will try

            1 Reply Last reply
            0
            • P Pl45m4
              26 Jan 2021, 11:58

              @suslucoder

              One timer, one function to update all four data series.

              Or four timers, if you want to update them independently / stop one update interval. But then one function is still enough. You can connect all timers to one function and check inside this function which series are enabled and what to update.

              D Offline
              D Offline
              deleted286
              wrote on 26 Jan 2021, 12:30 last edited by
              #6

              @Pl45m4 How about reading? Can i do all of them in one funciton?

              P 1 Reply Last reply 26 Jan 2021, 12:33
              0
              • D deleted286
                26 Jan 2021, 12:30

                @Pl45m4 How about reading? Can i do all of them in one funciton?

                P Offline
                P Offline
                Pl45m4
                wrote on 26 Jan 2021, 12:33 last edited by
                #7

                @suslucoder

                If your files all have the same structure (separator, data etc.), yes, you should actually.


                If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                ~E. W. Dijkstra

                1 Reply Last reply
                0

                7/7

                26 Jan 2021, 12:33

                • Login

                • Login or register to search.
                7 out of 7
                • First post
                  7/7
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved