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. Finding data(QString) of item in QAbstactTableModel
Forum Update on Monday, May 27th 2025

Finding data(QString) of item in QAbstactTableModel

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 3 Posters 832 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.
  • C Offline
    C Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on 15 Feb 2021, 06:13 last edited by
    #2

    Please show some code on what you you did. You can search your model by iterating over data() and then use the found index to select it in the view.

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    K 1 Reply Last reply 15 Feb 2021, 06:52
    0
    • C Christian Ehrlicher
      15 Feb 2021, 06:13

      Please show some code on what you you did. You can search your model by iterating over data() and then use the found index to select it in the view.

      K Offline
      K Offline
      keyboard_hellchang
      wrote on 15 Feb 2021, 06:52 last edited by keyboard_hellchang
      #3

      @Christian-Ehrlicher
      I have implemented it as below as you told me.
      But the number of data is now 100,000.
      The rate of finding data is extremely slow.

      mainwindow.cpp

      - QLineEdit slot function
       
      void MainWindow::slot_tableview_search()
      {                                          
          QString str = ui->x_search_ledit->text().simplified();
                                                 
          for(int i = 0; i < ui->tableview->model()->rowCount(); i++)
          {                                      
              for(int j = 0; j < ui->tableview->model()->columnCount(); j++) 
              {                                  
                  if(str == m_tableview_model->data(ui->tableview->model()->index(i, j), Qt::DisplayRole))
                  {
                      ui->tableview->setCurrentIndex(ui->tableview->model()->index(i, j));
                      ui->tableview->scrollTo(ui->tableview->model()->index(i, j));
                  }                              
                  else                           
                  {
                     ;
                  }                              
              }                                  
          }                                      
      }
      
      model.cpp
      - data() function
      QVariant Model::data(const QModelIndex &index, int role) const                              
      {                                                                                                    
          if( role==Qt::DisplayRole )                                                                      
          {                                                                                                
              if((index.row() == rowHeaderList.size() - 1) && (rowList[index.row()][index.column()] == 0)) 
              {                                                                                            
                  return QString();                                                                        
              }                                                                                            
              else                                                                                         
              {                                                                                            
                  return QString::number(rowList[index.row()][index.column()], 16);                        
              }                                                                                            
          }                                                                                                
                                                                                                           
          return QVariant::Invalid;                                                                        
      }
      
      J 1 Reply Last reply 15 Feb 2021, 08:26
      0
      • C Offline
        C Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on 15 Feb 2021, 06:59 last edited by
        #4

        Please use the code - tags so your code is readable.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        1 Reply Last reply
        0
        • C Offline
          C Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on 15 Feb 2021, 07:02 last edited by
          #5

          And do you find your data?
          Why do you create the index three times?

          if(str == m_tableview_model->data(ui->tableview->model()->index(i, j), Qt::DisplayRole))
          {
          ui->tableview->setCurrentIndex(ui->tableview->model()->index(i, j));
          ui->tableview->scrollTo(ui->tableview->model()->index(i, j));

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          K 1 Reply Last reply 15 Feb 2021, 07:15
          0
          • C Christian Ehrlicher
            15 Feb 2021, 07:02

            And do you find your data?
            Why do you create the index three times?

            if(str == m_tableview_model->data(ui->tableview->model()->index(i, j), Qt::DisplayRole))
            {
            ui->tableview->setCurrentIndex(ui->tableview->model()->index(i, j));
            ui->tableview->scrollTo(ui->tableview->model()->index(i, j));

            K Offline
            K Offline
            keyboard_hellchang
            wrote on 15 Feb 2021, 07:15 last edited by
            #6

            @Christian-Ehrlicher

            I'm sorry. I've never done a code upload before, so I'm not good at it.

            I want to find matching data in the entire table.
            The search speed is slowed down when applying the above code.

            The reason why I use indexes three times

            1. Use of an if condition
            2. Scroll
            3. Data focus
            1 Reply Last reply
            0
            • C Offline
              C Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on 15 Feb 2021, 07:16 last edited by
              #7

              Then create the index once and use it three times.
              But you still did not answer my question - do you find your string you're looking for with this loop above?

              And again: please modify your first post to use code tags.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              K 1 Reply Last reply 15 Feb 2021, 07:34
              0
              • C Christian Ehrlicher
                15 Feb 2021, 07:16

                Then create the index once and use it three times.
                But you still did not answer my question - do you find your string you're looking for with this loop above?

                And again: please modify your first post to use code tags.

                K Offline
                K Offline
                keyboard_hellchang
                wrote on 15 Feb 2021, 07:34 last edited by
                #8

                @Christian-Ehrlicher

                Code tag is completed.

                I'm trying to find a string entered in QLineEdit on the whole table.
                so I ran the for loop to search the whole table.

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on 15 Feb 2021, 07:35 last edited by
                  #9

                  @keyboard_hellchang said in Finding data(QString) of item in QAbstactTableModel:

                  so I ran the for loop to search the whole table.

                  All fine, but do you find it? If not make sure data() returns the strings you're expecting. Maybe add a debug output to see what you get.

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  K 1 Reply Last reply 16 Feb 2021, 00:23
                  0
                  • K keyboard_hellchang
                    15 Feb 2021, 06:52

                    @Christian-Ehrlicher
                    I have implemented it as below as you told me.
                    But the number of data is now 100,000.
                    The rate of finding data is extremely slow.

                    mainwindow.cpp

                    - QLineEdit slot function
                     
                    void MainWindow::slot_tableview_search()
                    {                                          
                        QString str = ui->x_search_ledit->text().simplified();
                                                               
                        for(int i = 0; i < ui->tableview->model()->rowCount(); i++)
                        {                                      
                            for(int j = 0; j < ui->tableview->model()->columnCount(); j++) 
                            {                                  
                                if(str == m_tableview_model->data(ui->tableview->model()->index(i, j), Qt::DisplayRole))
                                {
                                    ui->tableview->setCurrentIndex(ui->tableview->model()->index(i, j));
                                    ui->tableview->scrollTo(ui->tableview->model()->index(i, j));
                                }                              
                                else                           
                                {
                                   ;
                                }                              
                            }                                  
                        }                                      
                    }
                    
                    model.cpp
                    - data() function
                    QVariant Model::data(const QModelIndex &index, int role) const                              
                    {                                                                                                    
                        if( role==Qt::DisplayRole )                                                                      
                        {                                                                                                
                            if((index.row() == rowHeaderList.size() - 1) && (rowList[index.row()][index.column()] == 0)) 
                            {                                                                                            
                                return QString();                                                                        
                            }                                                                                            
                            else                                                                                         
                            {                                                                                            
                                return QString::number(rowList[index.row()][index.column()], 16);                        
                            }                                                                                            
                        }                                                                                                
                                                                                                                         
                        return QVariant::Invalid;                                                                        
                    }
                    
                    J Offline
                    J Offline
                    JonB
                    wrote on 15 Feb 2021, 08:26 last edited by
                    #10

                    @keyboard_hellchang said in Finding data(QString) of item in QAbstactTableModel:

                    But the number of data is now 100,000.
                    The rate of finding data is extremely slow.

                    • How slow is "slow"? If you have 100k+ items to search through sequentially it will take a bit of time.

                    • As @Christian-Ehrlicher has said, there is a place where you create the same index() three times, it might help if you only do that once, I don't know just how expensive that operation is.

                    • You convert every single element from a stored number to a string, to do the comparison. You might be better converting the string you are searching for to a number once, and then searching the elements for a number instead.

                    • You might directly search your rowList data structure instead of going via data().

                    • Finally, presumably you are not actually showing 100k+ items in a view, that would be too much for the user, so do you only need to search through whatever subset of the model you are showing in the view?

                    1 Reply Last reply
                    2
                    • C Christian Ehrlicher
                      15 Feb 2021, 07:35

                      @keyboard_hellchang said in Finding data(QString) of item in QAbstactTableModel:

                      so I ran the for loop to search the whole table.

                      All fine, but do you find it? If not make sure data() returns the strings you're expecting. Maybe add a debug output to see what you get.

                      K Offline
                      K Offline
                      keyboard_hellchang
                      wrote on 16 Feb 2021, 00:23 last edited by
                      #11

                      @Christian-Ehrlicher
                      I've almost solved this problem.
                      The feature is perfect except for the search speed.

                      1 Reply Last reply
                      0
                      • C Offline
                        C Offline
                        Christian Ehrlicher
                        Lifetime Qt Champion
                        wrote on 16 Feb 2021, 15:21 last edited by
                        #12

                        So what's your current solution? Did you implemented all what @JonB suggested? Esp. the conversions and the direct search in the model will help for sure.

                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                        Visit the Qt Academy at https://academy.qt.io/catalog

                        K 1 Reply Last reply 22 Feb 2021, 07:52
                        1
                        • C Christian Ehrlicher
                          16 Feb 2021, 15:21

                          So what's your current solution? Did you implemented all what @JonB suggested? Esp. the conversions and the direct search in the model will help for sure.

                          K Offline
                          K Offline
                          keyboard_hellchang
                          wrote on 22 Feb 2021, 07:52 last edited by
                          #13

                          @Christian-Ehrlicher
                          Yes, we have proceeded with all the proposals.
                          Also, this program is being used too well after completion.
                          Thank you!!

                          1 Reply Last reply
                          0

                          11/13

                          16 Feb 2021, 00:23

                          • Login

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