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
Qt 6.11 is out! See what's new in the release blog

How to acclerate QLineSeries after using opengl

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 1 Posters 807 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