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.7k 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
    #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