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