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 Updated to NodeBB v4.3 + New Features

Finding data(QString) of item in QAbstactTableModel

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 3 Posters 912 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.
  • Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on 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
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on 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
      0
      • Christian EhrlicherC Christian Ehrlicher

        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 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
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on 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
          0
          • Christian EhrlicherC Christian Ehrlicher

            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 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
            • Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on 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
              0
              • K keyboard_hellchang

                @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;                                                                        
                }
                
                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on 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
                • Christian EhrlicherC Christian Ehrlicher

                  @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 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
                  • Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on 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
                    1
                    • Christian EhrlicherC Christian Ehrlicher

                      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 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

                      • Login

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