Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. after deploying on RPI3 , UploadCSV file take very long time
Forum Updated to NodeBB v4.3 + New Features

after deploying on RPI3 , UploadCSV file take very long time

Scheduled Pinned Locked Moved Solved Mobile and Embedded
16 Posts 4 Posters 840 Views 2 Watching
  • 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 dziko147

    @SGaist I think the problem is caused by doing processing on the data .
    this is my code :

     while(!inFile.atEnd()){
            QString readedLine =inFile.readLine();
            QStringList listValue = readedLine.split(";");
            cter +=1;
    
            ui->tablewidget2->setRowCount(cter);
    
            ui->tablewidget3->setRowCount(cter);
    
            ui->tablewidget->setRowCount(cter);
            ui->tablewidget4->setRowCount(cter);
            ui->tablewidget5->setRowCount(cter);
    
    
    
            for(int k=0;k<listValue.size();k++){
                QTableWidgetItem     *Mytable = new QTableWidgetItem(listValue[k]);
                ui->tablewidget->setItem(cter-1,k,Mytable);
                ui->tablewidget->hideColumn(0);
                ui->tablewidget->setItem(cter-1, 8, new QTableWidgetItem(""));
                ui->tablewidget->setItem(cter-1, 9, new QTableWidgetItem(""));
                if(k<9)   Mytable->setFlags(Mytable->flags() ^ Qt::ItemIsEditable);// modif la valeur du k pour rendre le champ editable
    
    
               //setpoint table
                for(int t=10;t<551;t++){
                    QTableWidgetItem     *Mysetpoint = new QTableWidgetItem(listValue[k]);
    
                    ui->tablewidget2->setItem(cter-1,k,Mysetpoint);
                    ui->tablewidget2->hideColumn(0);
                    ui->tablewidget2->hideRow(t);
                    ui->tablewidget2->setItem(cter-1, 8, new QTableWidgetItem(""));
                    ui->tablewidget2->setItem(cter-1, 9, new QTableWidgetItem(""));
                    if(k<9)   Mysetpoint->setFlags(Mysetpoint->flags() ^ Qt::ItemIsEditable);
    
    
                }
                //setpoint table
    
                for(int a=341;a<549;a++){
                    QTableWidgetItem     *Mytableconfig = new QTableWidgetItem(listValue[k]);
    
                    ui->tablewidget3->setItem(cter-1,k,Mytableconfig);
                    ui->tablewidget3->hideColumn(0);
                    ui->tablewidget3->hideRow(a);
    
                    for(int x=0;x<10;x++){
                        ui->tablewidget3->hideRow(x);
    
                    }
    
    
                    ui->tablewidget3->setItem(cter-1, 8, new QTableWidgetItem(""));
                    ui->tablewidget3->setItem(cter-1, 9, new QTableWidgetItem(""));
                    if(k<9)   Mytableconfig->setFlags(Mytableconfig->flags() ^ Qt::ItemIsEditable);
    
                    //config table
                }
                //calib table
                //for(int m=0;m<342;m++){ for(int y=500;y<549;y++){
                QTableWidgetItem     *Mysetpoint = new QTableWidgetItem(listValue[k]);
    
                ui->tablewidget4->setItem(cter-1,k,Mysetpoint);
                ui->tablewidget4->hideColumn(0);
                for(int m=0;m<341;m++){
                    ui->tablewidget4->hideRow(m);}
                for(int p=500;p<549;p++){
                    ui->tablewidget4->hideRow(p);}
                ui->tablewidget4->setItem(cter-1, 8, new QTableWidgetItem(""));
                ui->tablewidget4->setItem(cter-1, 9, new QTableWidgetItem(""));
                if(k<9)   Mysetpoint->setFlags(Mysetpoint->flags() ^ Qt::ItemIsEditable);
                //calib table
                for(int n=0;n<525;n++){
                    QTableWidgetItem     *Mysetpoint = new QTableWidgetItem(listValue[k]);
    
                    ui->tablewidget5->setItem(cter-1,k,Mysetpoint);
                    ui->tablewidget5->hideColumn(0);
                    ui->tablewidget5->hideRow(n);
                    ui->tablewidget5->setItem(cter-1, 8, new QTableWidgetItem(""));
                    ui->tablewidget5->setItem(cter-1, 9, new QTableWidgetItem(""));
                    if(k<9)   Mysetpoint->setFlags(Mysetpoint->flags() ^ Qt::ItemIsEditable);
                }
                //calib table
    
    
            }
    

    So who can help me to optimize this code !
    I have one CSV file . I will extract 4 table from it

    thank you

    CP71C Offline
    CP71C Offline
    CP71
    wrote on last edited by CP71
    #6

    @dziko147
    If I read well I see for every cells of every line of yor csv I see:

    • 3 QTableWidgetItem
    • 1623 QTableWidgetItem ( setpoint table )
    • 594 QTableWidgetItem ( second setpoint table )
    • sorry but I lose the computation of objects but you must add other several thousand of QTableWidgetItem

    so only for one line on your csv there are several thousand of QTableWidgetItem, multiply everything for every line of CSV
    It is a huge number of items.

    First step I'd try set ui->tablewidget2->setUpdatesEnabled( false )
    for every QTableWidget and then the fill operation
    I'd try set ui->tablewidget2->setUpdatesEnabled( true ), alway for every QTableWidget.

    setUpdatesEnabled(false) disables update of QTableWidget when you add a QTableWidgetItem, for every add operation

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dziko147
      wrote on last edited by
      #7

      @CP71 I resume what i want to do .

      So i load a csv file(compouned of 600 row and 7 column).
      this csv is an Input for my Application. it contains variable and their types .

      So I would like to get every type in a single tablewidget .

      CP71C 1 Reply Last reply
      0
      • D dziko147

        @CP71 I resume what i want to do .

        So i load a csv file(compouned of 600 row and 7 column).
        this csv is an Input for my Application. it contains variable and their types .

        So I would like to get every type in a single tablewidget .

        CP71C Offline
        CP71C Offline
        CP71
        wrote on last edited by
        #8

        @dziko147
        Ok, try to call set Updates Enabled( false ) for every QTableWidget before your fill loop. I think could improve the performance.
        It is the first idea when I see your code

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dziko147
          wrote on last edited by dziko147
          #9

          @CP71 like this ?

           while(!inFile.atEnd()){
                  QString readedLine =inFile.readLine();
                  QStringList listValue = readedLine.split(";");
                  cter +=1;
          
                  ui->tablewidget2->setRowCount(cter);
          
                  ui->tablewidget3->setRowCount(cter);
          
                  ui->tablewidget->setRowCount(cter);
                  ui->tablewidget4->setRowCount(cter);
                  ui->tablewidget5->setRowCount(cter);
          
          ui->tablewidget->setUpdatesEnabled(false);
          ui->tablewidget2->setUpdatesEnabled(false);
          ui->tablewidget3->setUpdatesEnabled(false);
          ui->tablewidget4->setUpdatesEnabled(false);
          ui->tablewidget5->setUpdatesEnabled(false);
          
          
                  for(int k=0;k<listValue.size();k++){
                      //csv global
                      QTableWidgetItem     *Mytable = new QTableWidgetItem(listValue[k]);
                      ui->tablewidget->setItem(cter-1,k,Mytable);
                      ui->tablewidget->hideColumn(0);
                      ui->tablewidget->setItem(cter-1, 8, new QTableWidgetItem(""));
                      ui->tablewidget->setItem(cter-1, 9, new QTableWidgetItem(""));
                      if(k<9)   Mytable->setFlags(Mytable->flags() ^ Qt::ItemIsEditable);// modif la valeur du k pour rendre le champ editable
                      ui->tablewidget2->setUpdatesEnabled(true);
                        //csv global
          
                      //setpoint table
                      for(int t=10;t<551;t++){
                          QTableWidgetItem     *Mysetpoint = new QTableWidgetItem(listValue[k]);
          
                          ui->tablewidget2->setItem(cter-1,k,Mysetpoint);
                          ui->tablewidget2->hideColumn(0);
                          ui->tablewidget2->hideRow(t);
                          ui->tablewidget2->setItem(cter-1, 8, new QTableWidgetItem(""));
                          ui->tablewidget2->setItem(cter-1, 9, new QTableWidgetItem(""));
                          if(k<9)   Mysetpoint->setFlags(Mysetpoint->flags() ^ Qt::ItemIsEditable);
                          ui->tablewidget2->setUpdatesEnabled(true);
          
          
                      }
                      //setpoint table
          
                      //config table
                      for(int a=341;a<549;a++){
                          QTableWidgetItem     *Mytableconfig = new QTableWidgetItem(listValue[k]);
          
                          ui->tablewidget3->setItem(cter-1,k,Mytableconfig);
                          ui->tablewidget3->hideColumn(0);
                          ui->tablewidget3->hideRow(a);
          
                          for(int x=0;x<10;x++){
                              ui->tablewidget3->hideRow(x);
          
                          }
          
          
                          ui->tablewidget3->setItem(cter-1, 8, new QTableWidgetItem(""));
                          ui->tablewidget3->setItem(cter-1, 9, new QTableWidgetItem(""));
                          if(k<9)   Mytableconfig->setFlags(Mytableconfig->flags() ^ Qt::ItemIsEditable);
                          ui->tablewidget3->setUpdatesEnabled(true);
          
                          //config table
                      }
                      
                      //calib table
                      
                      QTableWidgetItem     *Mytablecalib = new QTableWidgetItem(listValue[k]);
          
                      ui->tablewidget4->setItem(cter-1,k,Mytablecalib);
                      ui->tablewidget4->hideColumn(0);
                      for(int m=0;m<341;m++){
                          ui->tablewidget4->hideRow(m);
                      }
                      for(int p=500;p<549;p++){
                          ui->tablewidget4->hideRow(p);
                      }
                      ui->tablewidget4->setItem(cter-1, 8, new QTableWidgetItem(""));
                      ui->tablewidget4->setItem(cter-1, 9, new QTableWidgetItem(""));
                      if(k<9)   Mytablecalib->setFlags(Mytablecalib->flags() ^ Qt::ItemIsEditable);
                      ui->tablewidget4->setUpdatesEnabled(true);
                      //calib table
                      
                      //param table
                      for(int n=0;n<525;n++){
                          QTableWidgetItem     *Myparamtable = new QTableWidgetItem(listValue[k]);
          
                          ui->tablewidget5->setItem(cter-1,k,Myparamtable);
                          ui->tablewidget5->hideColumn(0);
                          ui->tablewidget5->hideRow(n);
                          ui->tablewidget5->setItem(cter-1, 8, new QTableWidgetItem(""));
                          ui->tablewidget5->setItem(cter-1, 9, new QTableWidgetItem(""));
                          if(k<9)   Myparamtable->setFlags(Myparamtable->flags() ^ Qt::ItemIsEditable);
                          ui->tablewidget5->setUpdatesEnabled(true);
          
                      }
                      //param table
          
          CP71C 1 Reply Last reply
          0
          • D dziko147

            @CP71 like this ?

             while(!inFile.atEnd()){
                    QString readedLine =inFile.readLine();
                    QStringList listValue = readedLine.split(";");
                    cter +=1;
            
                    ui->tablewidget2->setRowCount(cter);
            
                    ui->tablewidget3->setRowCount(cter);
            
                    ui->tablewidget->setRowCount(cter);
                    ui->tablewidget4->setRowCount(cter);
                    ui->tablewidget5->setRowCount(cter);
            
            ui->tablewidget->setUpdatesEnabled(false);
            ui->tablewidget2->setUpdatesEnabled(false);
            ui->tablewidget3->setUpdatesEnabled(false);
            ui->tablewidget4->setUpdatesEnabled(false);
            ui->tablewidget5->setUpdatesEnabled(false);
            
            
                    for(int k=0;k<listValue.size();k++){
                        //csv global
                        QTableWidgetItem     *Mytable = new QTableWidgetItem(listValue[k]);
                        ui->tablewidget->setItem(cter-1,k,Mytable);
                        ui->tablewidget->hideColumn(0);
                        ui->tablewidget->setItem(cter-1, 8, new QTableWidgetItem(""));
                        ui->tablewidget->setItem(cter-1, 9, new QTableWidgetItem(""));
                        if(k<9)   Mytable->setFlags(Mytable->flags() ^ Qt::ItemIsEditable);// modif la valeur du k pour rendre le champ editable
                        ui->tablewidget2->setUpdatesEnabled(true);
                          //csv global
            
                        //setpoint table
                        for(int t=10;t<551;t++){
                            QTableWidgetItem     *Mysetpoint = new QTableWidgetItem(listValue[k]);
            
                            ui->tablewidget2->setItem(cter-1,k,Mysetpoint);
                            ui->tablewidget2->hideColumn(0);
                            ui->tablewidget2->hideRow(t);
                            ui->tablewidget2->setItem(cter-1, 8, new QTableWidgetItem(""));
                            ui->tablewidget2->setItem(cter-1, 9, new QTableWidgetItem(""));
                            if(k<9)   Mysetpoint->setFlags(Mysetpoint->flags() ^ Qt::ItemIsEditable);
                            ui->tablewidget2->setUpdatesEnabled(true);
            
            
                        }
                        //setpoint table
            
                        //config table
                        for(int a=341;a<549;a++){
                            QTableWidgetItem     *Mytableconfig = new QTableWidgetItem(listValue[k]);
            
                            ui->tablewidget3->setItem(cter-1,k,Mytableconfig);
                            ui->tablewidget3->hideColumn(0);
                            ui->tablewidget3->hideRow(a);
            
                            for(int x=0;x<10;x++){
                                ui->tablewidget3->hideRow(x);
            
                            }
            
            
                            ui->tablewidget3->setItem(cter-1, 8, new QTableWidgetItem(""));
                            ui->tablewidget3->setItem(cter-1, 9, new QTableWidgetItem(""));
                            if(k<9)   Mytableconfig->setFlags(Mytableconfig->flags() ^ Qt::ItemIsEditable);
                            ui->tablewidget3->setUpdatesEnabled(true);
            
                            //config table
                        }
                        
                        //calib table
                        
                        QTableWidgetItem     *Mytablecalib = new QTableWidgetItem(listValue[k]);
            
                        ui->tablewidget4->setItem(cter-1,k,Mytablecalib);
                        ui->tablewidget4->hideColumn(0);
                        for(int m=0;m<341;m++){
                            ui->tablewidget4->hideRow(m);
                        }
                        for(int p=500;p<549;p++){
                            ui->tablewidget4->hideRow(p);
                        }
                        ui->tablewidget4->setItem(cter-1, 8, new QTableWidgetItem(""));
                        ui->tablewidget4->setItem(cter-1, 9, new QTableWidgetItem(""));
                        if(k<9)   Mytablecalib->setFlags(Mytablecalib->flags() ^ Qt::ItemIsEditable);
                        ui->tablewidget4->setUpdatesEnabled(true);
                        //calib table
                        
                        //param table
                        for(int n=0;n<525;n++){
                            QTableWidgetItem     *Myparamtable = new QTableWidgetItem(listValue[k]);
            
                            ui->tablewidget5->setItem(cter-1,k,Myparamtable);
                            ui->tablewidget5->hideColumn(0);
                            ui->tablewidget5->hideRow(n);
                            ui->tablewidget5->setItem(cter-1, 8, new QTableWidgetItem(""));
                            ui->tablewidget5->setItem(cter-1, 9, new QTableWidgetItem(""));
                            if(k<9)   Myparamtable->setFlags(Myparamtable->flags() ^ Qt::ItemIsEditable);
                            ui->tablewidget5->setUpdatesEnabled(true);
            
                        }
                        //param table
            
            CP71C Offline
            CP71C Offline
            CP71
            wrote on last edited by
            #10

            @dziko147
            before while

            ui->tablewidget->setUpdatesEnabled(false);
            ui->tablewidget2->setUpdatesEnabled(false);
            ui->tablewidget3->setUpdatesEnabled(false);
            ui->tablewidget4->setUpdatesEnabled(false);
            ui->tablewidget5->setUpdatesEnabled(false);

            while (...)
            {
            ...
            }

            after while
            ui->tablewidget->setUpdatesEnabled(true);
            ui->tablewidget2->setUpdatesEnabled(true);
            ui->tablewidget3->setUpdatesEnabled(true);
            ui->tablewidget4->setUpdatesEnabled(true);
            ui->tablewidget5->setUpdatesEnabled(true);

            1 Reply Last reply
            0
            • D Offline
              D Offline
              dziko147
              wrote on last edited by
              #11

              @CP71 unfortunately it still takes long time :/

              CP71C 1 Reply Last reply
              0
              • D dziko147

                @CP71 unfortunately it still takes long time :/

                CP71C Offline
                CP71C Offline
                CP71
                wrote on last edited by
                #12

                @dziko147
                no other idea at the moment!
                Sorry but I must go.
                See you on monday

                1 Reply Last reply
                0
                • D Offline
                  D Offline
                  dziko147
                  wrote on last edited by
                  #13

                  @CP71 Ok thank you bye :)

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #14

                    First thing: why do you have one CSV file that seems to contain data for radically different elements ?
                    Wouldn't it make more sense to have one file for each ?
                    You code will break as soon as you add a line somewhere in the middle of the file.

                    That said as @CP71 wrote, you are creating a ridiculous amount of items, that you hide as soon as they are created doing many operations for nothing.

                    The file being pretty small, you should load it at once and then process the lines that are specific to each table widget by group. There's no need to do anything for your table widget number one when the lines do not concern it.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    1
                    • D Offline
                      D Offline
                      dziko147
                      wrote on last edited by
                      #15

                      @SGaist ok your solution is clear . and thank you for your reply .
                      but can you suggest any example ?

                      1 Reply Last reply
                      0
                      • D Offline
                        D Offline
                        dziko147
                        wrote on last edited by
                        #16

                        Finally , i solve this problem :D .

                        this is source code for those you need :D

                        //here i fill data to tablewidget
                        while(!inFile.atEnd()){
                                QString readedLine =inFile.readLine();
                                QStringList listValue = readedLine.split(";");
                                cter +=1;
                          ui->tablewidget->setRowCount(cter);
                         for(int k=0;k<listValue.size();k++){
                                    //csv global
                                    QTableWidgetItem     *Mytable = new QTableWidgetItem(listValue[k]);
                                    ui->tablewidget->setItem(cter-1,k,Mytable);
                                    ui->tablewidget->hideColumn(0);
                                    ui->tablewidget->setItem(cter-1, 8, new QTableWidgetItem(""));
                                    ui->tablewidget->setItem(cter-1, 9, new QTableWidgetItem(""));
                                    if(k<9)   Mytable->setFlags(Mytable->flags() ^ Qt::ItemIsEditable);// modif la valeur du k pour rendre le champ editable
                                      //csv global
                          }
                        }
                        

                        then when button clicked I extract some data from tablewidget :

                        void UploadCSV::on_Corebtn_clicked()
                        {      ui->tablewidget->setFixedSize(950,450);
                        
                              // ui->tablewidget->setVisible(true);
                               for (int i=0;i<ui->tablewidget->rowCount() ;i++ ) {
                                   QTableWidgetItem *cell7 = ui->tablewidget->item(i,7);
                                   QVariant myData7 = cell7->data(Qt::DisplayRole);
                                   if(myData7!="Core_setpoint"){
                                       ui->tablewidget->hideRow(i);
                                   }
                               }
                        
                        }
                        

                        then when button is released should Show the row hided :D

                        void UploadCSV::on_Corebtn_released()
                        {
                            ui->tablewidget->setFixedSize(950,450);
                            for (int i=0;i<ui->tablewidget->rowCount() ;i++ ) {
                          ui->tablewidget->showRow(i);
                            }
                        }
                        

                        thank you all for your help :)

                        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