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 9.9k 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.
  • 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