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. How to acclerate QLineSeries after using opengl
Forum Updated to NodeBB v4.3 + New Features

How to acclerate QLineSeries after using opengl

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 1 Posters 485 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.
  • H Offline
    H Offline
    horacio111
    wrote on last edited by
    #1

    I have to draw a chart with 4 lines. Each line has 6,500 points.

    I've already used setUseOpenGL(true) on thoes lines

    It still needs 5 or 6 seconds to draw these lines.

    How can I accelerate the process?

    1 Reply Last reply
    0
    • H Offline
      H Offline
      horacio111
      wrote on last edited by horacio111
      #2

      i've tried sth like this:

          QLineSeries *lines2 = new QLineSeries();
          QLineSeries *lines3 = new QLineSeries();
          QLineSeries *lines4 = new QLineSeries();
      
          lines2->setUseOpenGL(true);
          lines3->setUseOpenGL(true);
          lines4->setUseOpenGL(true);
      
      
      
      
          //readData
      
          int nLen = 6500;
          short *sData_CH0 = new short[nLen];
          short *sData_CH1 = new short[nLen];
          short *sData_CH2 = new short[nLen];
          short *sData_CH3 = new short[nLen];
          memset(sData_CH0, 0, sizeof(short)*nLen);
          memset(sData_CH1, 0, sizeof(short)*nLen);
          memset(sData_CH2, 0, sizeof(short)*nLen);
          memset(sData_CH3, 0, sizeof(short)*nLen);
      
          static const int nLen_Header = 160;
          FILE *fp;
          _wfopen_s(&fp,L"d:/11.ocean", L"rb");
      
          double dLen_Binshot = 2 * 4 * nLen;
      
          __int64 nSeekL = nLen_Header + dLen_Binshot * 0;
      
          _fseeki64(fp, nSeekL, SEEK_SET);
      
          int maxY = 0;
          int minY = 0;
          fread(sData_CH0, sizeof(short), nLen, fp);
          fread(sData_CH1, sizeof(short), nLen, fp);
          fread(sData_CH2, sizeof(short), nLen, fp);
          fread(sData_CH3, sizeof(short), nLen, fp);
          fclose(fp);
      
          for (int i=0;i < nLen;i++) {
              if(sData_CH1[i]<(-2000)){
                  sData_CH1[i]=0;
              }
              if(sData_CH1[i]<(-2000)){
                  sData_CH1[i]=0;
              }
              if(sData_CH1[i]<minY){
                  minY= sData_CH1[i];
              }
              if(sData_CH1[i]>maxY){
                  maxY= sData_CH1[i];
              }
             lines2->append(QPointF(i, sData_CH1[i]));
          }
          for (int i=0;i < nLen;i++) {
              if(sData_CH2[i]<(-2000)){
                  sData_CH2[i]=0;
              }
              if(sData_CH2[i]<(-2000)){
                  sData_CH2[i]=0;
              }
              if(sData_CH2[i]<minY){
                  minY= sData_CH2[i];
              }
              if(sData_CH2[i]>maxY){
                  maxY= sData_CH2[i];
              }
              lines3->append(QPointF(i, sData_CH2[i]));
          }
          for (int i=0;i < nLen;i++) {
              if(sData_CH3[i]<(-2000)){
                  sData_CH3[i]=0;
              }
              if(sData_CH3[i]<(-2000)){
                  sData_CH3[i]=0;
              }
              if(sData_CH3[i]<minY){
                  minY= sData_CH3[i];
              }
              if(sData_CH3[i]>maxY){
                  maxY= sData_CH3[i];
              }
              lines4->append(QPointF(i, sData_CH3[i]));
          }
      
      
      
      
          QChart *chart = new QChart();
          chart->addSeries(lines3);
          chart->addSeries(lines4);
          chart->addSeries(lines2);
          chart->createDefaultAxes();
          chart->axisX()->setRange(0, 6500);
          chart->axisY()->setRange(minY, maxY);
          chart->setTitle("chart");
          chartView = new ChartView(chart);
          chartView->setRenderHint(QPainter::Antialiasing);
      
          ui->mainChartLayout->addWidget(chartView);
      

      and it is very fast.

      but when i append the points to lines after adding the lines to the chart, it took 6 second to draw the lines.

      here is the code:

         QLineSeries *lines2 = new QLineSeries();
          QLineSeries *lines3 = new QLineSeries();
          QLineSeries *lines4 = new QLineSeries();
          lines2->setUseOpenGL(true);
          lines3->setUseOpenGL(true);
          lines4->setUseOpenGL(true);
      
          QChart *chart = new QChart();
          chart->addSeries(lines3);
          chart->addSeries(lines4);
          chart->addSeries(lines2);
          chart->createDefaultAxes();
          chart->axisX()->setRange(0, 6500);
          chart->axisY()->setRange(-200, 20000);
          chart->setTitle("chart");
          chartView = new ChartView(chart);
          chartView->setRenderHint(QPainter::Antialiasing);
      
          ui->mainChartLayout->addWidget(chartView);
      
      
      
          int nLen = 6500;
          short *sData_CH0 = new short[nLen];
          short *sData_CH1 = new short[nLen];
          short *sData_CH2 = new short[nLen];
          short *sData_CH3 = new short[nLen];
          memset(sData_CH0, 0, sizeof(short)*nLen);
          memset(sData_CH1, 0, sizeof(short)*nLen);
          memset(sData_CH2, 0, sizeof(short)*nLen);
          memset(sData_CH3, 0, sizeof(short)*nLen);
      
          static const int nLen_Header = 160;
          FILE *fp;
          _wfopen_s(&fp,L"d:/11.ocean", L"rb");
      
          double dLen_Binshot = 2 * 4 * nLen;
      
          __int64 nSeekL = nLen_Header + dLen_Binshot * 0;
      
          _fseeki64(fp, nSeekL, SEEK_SET);
      
          int maxY = 0;
          int minY = 0;
          fread(sData_CH0, sizeof(short), nLen, fp);
          fread(sData_CH1, sizeof(short), nLen, fp);
          fread(sData_CH2, sizeof(short), nLen, fp);
          fread(sData_CH3, sizeof(short), nLen, fp);
          fclose(fp);
      
          for (int i=0;i < nLen;i++) {
              if(sData_CH1[i]<(-2000)){
                  sData_CH1[i]=0;
              }
              if(sData_CH1[i]<(-2000)){
                  sData_CH1[i]=0;
              }
              if(sData_CH1[i]<minY){
                  minY= sData_CH1[i];
              }
              if(sData_CH1[i]>maxY){
                  maxY= sData_CH1[i];
              }
             lines2->append(QPointF(i, sData_CH1[i]));
          }
          for (int i=0;i < nLen;i++) {
              if(sData_CH2[i]<(-2000)){
                  sData_CH2[i]=0;
              }
              if(sData_CH2[i]<(-2000)){
                  sData_CH2[i]=0;
              }
              if(sData_CH2[i]<minY){
                  minY= sData_CH2[i];
              }
              if(sData_CH2[i]>maxY){
                  maxY= sData_CH2[i];
              }
              lines3->append(QPointF(i, sData_CH2[i]));
          }
          for (int i=0;i < nLen;i++) {
              if(sData_CH3[i]<(-2000)){
                  sData_CH3[i]=0;
              }
              if(sData_CH3[i]<(-2000)){
                  sData_CH3[i]=0;
              }
              if(sData_CH3[i]<minY){
                  minY= sData_CH3[i];
              }
              if(sData_CH3[i]>maxY){
                  maxY= sData_CH3[i];
              }
              lines4->append(QPointF(i, sData_CH3[i]));
          }
      
      
      
      
      
      1 Reply Last reply
      0

      • Login

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