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. Choosing columns for display in an QSqlTableModel
Qt 6.11 is out! See what's new in the release blog

Choosing columns for display in an QSqlTableModel

Scheduled Pinned Locked Moved Solved General and Desktop
qsqltablemodel
20 Posts 4 Posters 13.0k Views 3 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #6

    No need to use the QStandardItem here

     for(;query.next ();++row1)
        {
            smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ());
            Pixmap.loadFromData (query.value (1).toByteArray (););
            smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
            smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ());
        }
    

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    G 1 Reply Last reply
    0
    • VRoninV VRonin

      No need to use the QStandardItem here

       for(;query.next ();++row1)
          {
              smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ());
              Pixmap.loadFromData (query.value (1).toByteArray (););
              smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
              smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ());
          }
      
      G Offline
      G Offline
      gabor53
      wrote on last edited by
      #7

      @VRonin
      Thank you. I have the following:

      	 QStandardItemModel *smodel = new QStandardItemModel;
      
          row1 = 0;
      
      	for(;query.next (); row1++)
          {
              smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ());
              qDebug() << "row1: " << row1;
              qDebug() << "NameD: " << NameD;
              Pixmap.loadFromData (query.value (1).toByteArray ());
              smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
              smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ());
              qDebug() << "DescrD: " << DescrD;
          }
      
      	ui->tableView->show ();
      

      qDebug() shows that the variables have the right values, but nothing shows in the table. What did I miss?

      1 Reply Last reply
      0
      • mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #8

        Hi
        Maybe
        smodel->setData (xx for DescrD needs Qt::DisplayRole
        like u do for Qt::DecorationRole ?

        G 1 Reply Last reply
        0
        • mrjjM mrjj

          Hi
          Maybe
          smodel->setData (xx for DescrD needs Qt::DisplayRole
          like u do for Qt::DecorationRole ?

          G Offline
          G Offline
          gabor53
          wrote on last edited by
          #9

          @mrjj
          Unfortunately

                  smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString (),Qt::DisplayRole);
          

          did nothing. The table is still empty.

          mrjjM 1 Reply Last reply
          0
          • G gabor53

            @mrjj
            Unfortunately

                    smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString (),Qt::DisplayRole);
            

            did nothing. The table is still empty.

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #10

            @gabor53
            and u are 100000% sure that it adds NameD ?
            and its not empty?

            1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #11

              the code you posted is missing the necessary smodel->insertRows() smodel->inserColumns() are you doing it?

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              G 1 Reply Last reply
              0
              • VRoninV VRonin

                the code you posted is missing the necessary smodel->insertRows() smodel->inserColumns() are you doing it?

                G Offline
                G Offline
                gabor53
                wrote on last edited by
                #12

                @VRonin
                Hi
                I don't have it. Whete is this supposed to go?
                Thank you

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

                  Hi,

                  Why not just use a QSqlQueryModel and a QStyledItemDelegate ?

                  If you want to have specific names for the columns you are selecting then use the SELECT myColumn AS NewName construct.

                  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
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by VRonin
                    #14
                    QStandardItemModel *smodel = new QStandardItemModel(this); // maybe give it a parent to avoid memory leaks
                    
                    for(int row1=0;query.next (); ++row1)
                        {
                    if(row1==0){
                    const QSqlRecord qRec=query.record();
                    smodel->insertColumns(0,qRec.count());
                    Q_ASSERT(query.size()>=0) // if NO COUNT is set in the database then you have to calculate the size manually
                    smodel->inserRows(0,query.size());
                    
                    // Optional: set headers
                    for(int i=0;i<qRec.count();++i)
                    smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i));
                    }
                            smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ());
                            qDebug() << "row1: " << row1;
                            qDebug() << "NameD: " << NameD;
                            Pixmap.loadFromData (query.value (1).toByteArray ());
                            smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
                            smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ());
                            qDebug() << "DescrD: " << DescrD;
                        }
                    

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    G 1 Reply Last reply
                    0
                    • VRoninV VRonin
                      QStandardItemModel *smodel = new QStandardItemModel(this); // maybe give it a parent to avoid memory leaks
                      
                      for(int row1=0;query.next (); ++row1)
                          {
                      if(row1==0){
                      const QSqlRecord qRec=query.record();
                      smodel->insertColumns(0,qRec.count());
                      Q_ASSERT(query.size()>=0) // if NO COUNT is set in the database then you have to calculate the size manually
                      smodel->inserRows(0,query.size());
                      
                      // Optional: set headers
                      for(int i=0;i<qRec.count();++i)
                      smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i));
                      }
                              smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ());
                              qDebug() << "row1: " << row1;
                              qDebug() << "NameD: " << NameD;
                              Pixmap.loadFromData (query.value (1).toByteArray ());
                              smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
                              smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ());
                              qDebug() << "DescrD: " << DescrD;
                          }
                      
                      G Offline
                      G Offline
                      gabor53
                      wrote on last edited by
                      #15

                      @VRonin
                      Thank you very much for the code. Now it shows the column headers, but still no data.
                      I added

                      ui->tableView->setModel (smodel);
                      

                      to view it in tableView.Any Idea why no records show?
                      Thank you.

                      1 Reply Last reply
                      0
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by VRonin
                        #16

                        Looks like rows are still mot inserted, try this:

                        for(int row1=0;query.next (); ++row1)
                            {
                        if(row1==0){
                        const QSqlRecord qRec=query.record();
                        smodel->insertColumns(0,qRec.count());
                        
                        // Optional: set headers
                        for(int i=0;i<qRec.count();++i)
                        smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i));
                        }
                        
                        smodel->inserRow(row1);
                                smodel->setData (smodel->index(row1,0), query.value(0).toString ());
                                Pixmap.loadFromData (query.value (1).toByteArray ());
                                smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
                                smodel->setData (smodel->index(row1,2), query.value (2).toString ());
                            }
                        

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        G 1 Reply Last reply
                        1
                        • VRoninV VRonin

                          Looks like rows are still mot inserted, try this:

                          for(int row1=0;query.next (); ++row1)
                              {
                          if(row1==0){
                          const QSqlRecord qRec=query.record();
                          smodel->insertColumns(0,qRec.count());
                          
                          // Optional: set headers
                          for(int i=0;i<qRec.count();++i)
                          smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i));
                          }
                          
                          smodel->inserRow(row1);
                                  smodel->setData (smodel->index(row1,0), query.value(0).toString ());
                                  Pixmap.loadFromData (query.value (1).toByteArray ());
                                  smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole );
                                  smodel->setData (smodel->index(row1,2), query.value (2).toString ());
                              }
                          
                          G Offline
                          G Offline
                          gabor53
                          wrote on last edited by
                          #17

                          @VRonin
                          Thank you. This one displays data from the database but only one record (1 line). Trying to figure out why.

                          1 Reply Last reply
                          0
                          • G Offline
                            G Offline
                            gabor53
                            wrote on last edited by
                            #18

                            Any idea why this code displays only 1 record from the database?

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

                              Check your query and your database content.

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

                              G 1 Reply Last reply
                              0
                              • SGaistS SGaist

                                Check your query and your database content.

                                G Offline
                                G Offline
                                gabor53
                                wrote on last edited by
                                #20

                                @SGaist Thank you. I was missing a }.

                                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