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

Choosing columns for display in an QSqlTableModel

Scheduled Pinned Locked Moved Solved General and Desktop
qsqltablemodel
20 Posts 4 Posters 10.2k 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.
  • 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