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