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

QSQLRelationalTableModel display relation

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 3 Posters 598 Views 1 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.
  • B Offline
    B Offline
    BushyAxis793
    wrote on 22 Mar 2023, 20:01 last edited by
    #1

    Hello. I have a problem with my QSqlRelationalTableModel. I have table in my database "clampingtypes" which is in relationship with "clampings" table. I tried to show relational with this code:

    
    
        tableModel->setTable("clampings");
    
    
        tableModel->setRelation(3,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
    
    
       // tableModel->setRelation(3,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
        //tableModel->setRelation(4,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
        //tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
    /*
        tableModel->setHeaderData(0,Qt::Horizontal,tr("Numer ID"));
        tableModel->setHeaderData(1,Qt::Horizontal,tr("Rodzaj"));
        tableModel->setHeaderData(2,Qt::Horizontal,tr("Długość [mm]"));
        tableModel->setHeaderData(3,Qt::Horizontal,tr("Szerokość [mm]"));
        tableModel->setHeaderData(4,Qt::Horizontal,tr("Wysokość [mm]"));
        tableModel->setHeaderData(5,Qt::Horizontal,tr("Materiał"));
        tableModel->setHeaderData(6,Qt::Horizontal,tr("Masa [kg]"));
        tableModel->setHeaderData(7,Qt::Horizontal,tr("Opis przyrządu"));
    
    */
    
        clampingTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
        clampingTableView->setFocusPolicy(Qt::NoFocus);
        clampingTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    
    
        clampingTableView->setModel(tableModel);
        tableModel->select();
    
        /*
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingID"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingName"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingSeller"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingLink"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingImage"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMaterialID"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMass"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingDescription"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPriceTypeID"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingAddedDateTime"));
        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPrice"));
    
    */
    
        clampingTableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(3,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(4,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(5,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(6,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(7,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(8,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(9,QHeaderView::ResizeToContents);
        clampingTableView->horizontalHeader()->setSectionResizeMode(10,QHeaderView::ResizeToContents);
    
    
    
        int rowTotalWidth = 0;
    
        int count = clampingTableView->horizontalHeader()->count();
    
        for(int i = 0; i<count;++i)
        {
            if(!clampingTableView->horizontalHeader()->isSectionHidden(i))
            {
                rowTotalWidth += clampingTableView->horizontalHeader()->sectionSize(i);
            }
        }
    
        clampingTableView->setMaximumWidth(780);
    

    But the result is:

    a8000114-0afe-450a-81e5-39143a1525db-image.png

    Below is my clampingtypes table:

    b9ed3f00-68a6-475d-8c36-d76ba995a537-image.png

    Any idea how to selve this issue? I will be very appreciate. Have a good day.

    S 1 Reply Last reply 22 Mar 2023, 20:03
    0
    • B BushyAxis793
      24 Mar 2023, 18:01

      @JonB I noticed that when I set the relation to column 6. it displays correctly, but only one dimension. Example:

          tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
          tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
          tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
          tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
          tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
      

      The result

      07f20b5b-2121-4b1d-a5e1-7003d438b4fe-image.png

      When I set relation for Dimension2 for column 6 it shows data from dimension2 but never all dimensions. I have no idea why.

      EDIT: I suppouse I have to add additional columns for each dimension.

      J Offline
      J Offline
      JonB
      wrote on 25 Mar 2023, 08:24 last edited by JonB
      #11

      @BushyAxis793 said in QSQLRelationalTableModel display relation:

      tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
      tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
      tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
      

      I am having trouble understanding what is going on here. Maybe it doesn't help for me that your column display names are in Polish. And I don't understand what you are saying when you write

      EDIT: I suppouse I have to add additional columns for each dimension.

      These 3 lines mean: columns #6, #7 & #8 in tableModel each contain an "InstrumentID". The code should use the value in that column in the original table to locate (via InstrumentID) the corresponding row in table instruments. Then it should display from that row InstrumentDimension1/2/3, which must already be columns in instruments.

      It is a little "unusual" to display more than one column from the foreign key table. I do not know that Qt does not support that for some reason, but maybe for a given QSqlRelation("instruments","InstrumentID", ...), i.e. foreign key table+lookup-column, it only allows one relation with one display column. Hence you only see one of the InstrumentDimension1/2/3 mappings?

      Although it's not well documented, QSqlRelation actually allows multiple columns to be specified for the "display" column. It might be interesting to see what

      tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1, InstrumentDimension2, InstrumentDimension3"));
      

      produces for you (you may need to comment out the relations for columns #7 & #8). That column type would be string.

      B 1 Reply Last reply 25 Mar 2023, 10:31
      0
      • B BushyAxis793
        22 Mar 2023, 20:01

        Hello. I have a problem with my QSqlRelationalTableModel. I have table in my database "clampingtypes" which is in relationship with "clampings" table. I tried to show relational with this code:

        
        
            tableModel->setTable("clampings");
        
        
            tableModel->setRelation(3,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
        
        
           // tableModel->setRelation(3,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
            //tableModel->setRelation(4,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
            //tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
        /*
            tableModel->setHeaderData(0,Qt::Horizontal,tr("Numer ID"));
            tableModel->setHeaderData(1,Qt::Horizontal,tr("Rodzaj"));
            tableModel->setHeaderData(2,Qt::Horizontal,tr("Długość [mm]"));
            tableModel->setHeaderData(3,Qt::Horizontal,tr("Szerokość [mm]"));
            tableModel->setHeaderData(4,Qt::Horizontal,tr("Wysokość [mm]"));
            tableModel->setHeaderData(5,Qt::Horizontal,tr("Materiał"));
            tableModel->setHeaderData(6,Qt::Horizontal,tr("Masa [kg]"));
            tableModel->setHeaderData(7,Qt::Horizontal,tr("Opis przyrządu"));
        
        */
        
            clampingTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
            clampingTableView->setFocusPolicy(Qt::NoFocus);
            clampingTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
        
        
            clampingTableView->setModel(tableModel);
            tableModel->select();
        
            /*
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingID"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingName"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingSeller"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingLink"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingImage"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMaterialID"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMass"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingDescription"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPriceTypeID"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingAddedDateTime"));
            clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPrice"));
        
        */
        
            clampingTableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(3,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(4,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(5,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(6,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(7,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(8,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(9,QHeaderView::ResizeToContents);
            clampingTableView->horizontalHeader()->setSectionResizeMode(10,QHeaderView::ResizeToContents);
        
        
        
            int rowTotalWidth = 0;
        
            int count = clampingTableView->horizontalHeader()->count();
        
            for(int i = 0; i<count;++i)
            {
                if(!clampingTableView->horizontalHeader()->isSectionHidden(i))
                {
                    rowTotalWidth += clampingTableView->horizontalHeader()->sectionSize(i);
                }
            }
        
            clampingTableView->setMaximumWidth(780);
        

        But the result is:

        a8000114-0afe-450a-81e5-39143a1525db-image.png

        Below is my clampingtypes table:

        b9ed3f00-68a6-475d-8c36-d76ba995a537-image.png

        Any idea how to selve this issue? I will be very appreciate. Have a good day.

        S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 22 Mar 2023, 20:03 last edited by
        #2

        Hi,

        Do you have null entries in your table ?
        Does it show correctly if you don't set the relation ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        B 1 Reply Last reply 22 Mar 2023, 20:12
        1
        • S SGaist
          22 Mar 2023, 20:03

          Hi,

          Do you have null entries in your table ?
          Does it show correctly if you don't set the relation ?

          B Offline
          B Offline
          BushyAxis793
          wrote on 22 Mar 2023, 20:12 last edited by
          #3

          @SGaist Thanks for fast reply! I have some NULL entries but without relation it works correctly.

          S 1 Reply Last reply 22 Mar 2023, 20:18
          0
          • B BushyAxis793
            22 Mar 2023, 20:12

            @SGaist Thanks for fast reply! I have some NULL entries but without relation it works correctly.

            S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 22 Mar 2023, 20:18 last edited by
            #4

            Then that's why you have missing entries.

            See the QSqlRelationnalTableModel details

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            J 1 Reply Last reply 22 Mar 2023, 20:50
            1
            • S SGaist
              22 Mar 2023, 20:18

              Then that's why you have missing entries.

              See the QSqlRelationnalTableModel details

              J Offline
              J Offline
              JonB
              wrote on 22 Mar 2023, 20:50 last edited by
              #5

              @SGaist
              What area in https://doc.qt.io/qt-6/qsqlrelationaltablemodel.html#details are you referring @BushyAxis793 to? I can only think of the point which says:

              If a relational table contains keys that refer to non-existent rows in the referenced table, the rows containing the invalid keys will not be exposed through the model. The user or the database is responsible for keeping referential integrity.

              I don't see it saying anything about SQL NULLs?

              I would guess to refer the OP to void QSqlRelationalTableModel::setJoinMode(QSqlRelationalTableModel::JoinMode joinMode)

              Sets the SQL joinMode to show or hide rows with NULL foreign keys. In InnerJoin mode (the default) these rows will not be shown: use the LeftJoin mode if you want to show them.

              @BushyAxis793 Is this relevant to your situation, does LeftJoin resolve your issue?

              B 1 Reply Last reply 23 Mar 2023, 20:46
              1
              • J JonB
                22 Mar 2023, 20:50

                @SGaist
                What area in https://doc.qt.io/qt-6/qsqlrelationaltablemodel.html#details are you referring @BushyAxis793 to? I can only think of the point which says:

                If a relational table contains keys that refer to non-existent rows in the referenced table, the rows containing the invalid keys will not be exposed through the model. The user or the database is responsible for keeping referential integrity.

                I don't see it saying anything about SQL NULLs?

                I would guess to refer the OP to void QSqlRelationalTableModel::setJoinMode(QSqlRelationalTableModel::JoinMode joinMode)

                Sets the SQL joinMode to show or hide rows with NULL foreign keys. In InnerJoin mode (the default) these rows will not be shown: use the LeftJoin mode if you want to show them.

                @BushyAxis793 Is this relevant to your situation, does LeftJoin resolve your issue?

                B Offline
                B Offline
                BushyAxis793
                wrote on 23 Mar 2023, 20:46 last edited by
                #6

                @JonB Thanks for reply. It works! However I have one more question. Is it possible to show a few relation from one table? I have a table:

                f128bcbd-49c8-4326-9c15-e25caf081e1c-image.png

                I would like to add:

                • Dimension1
                • Dimension2
                • Dimension3

                I tried with:

                
                 tableModel->setTable("clampings");
                    
                        tableModel->setJoinMode(QSqlRelationalTableModel::LeftJoin);
                    
                    
                    
                    
                    
                        tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
                    
                        tableModel->setRelation(4,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                    
                        tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                    
                        tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                    
                        tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
                    
                    
                    
                        tableModel->setHeaderData(1,Qt::Horizontal,tr("Numer ID"));
                    
                        tableModel->setHeaderData(2,Qt::Horizontal,tr("Rodzaj"));
                    
                        tableModel->setHeaderData(3,Qt::Horizontal,tr("Nazwa przyrządu"));
                    
                        tableModel->setHeaderData(4,Qt::Horizontal,tr("Długość [mm]"));
                    
                        tableModel->setHeaderData(5,Qt::Horizontal,tr("Szerokość [mm]"));
                    
                        tableModel->setHeaderData(6,Qt::Horizontal,tr("Wysokość [mm]"));
                    
                        tableModel->setHeaderData(9,Qt::Horizontal,tr("Materiał"));
                    
                        tableModel->setHeaderData(10,Qt::Horizontal,tr("Opis przyrządu"));
                    
                        tableModel->setHeaderData(11,Qt::Horizontal,tr("Masa [kg]"));
                    
                    
                    
                    
                    
                    
                    
                        clampingTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
                    
                        clampingTableView->setFocusPolicy(Qt::NoFocus);
                    
                        clampingTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
                    
                    
                    
                    
                    
                    
                    
                        clampingTableView->setModel(tableModel);
                    
                        tableModel->select();
                    
                    
                    
                    
                    
                    
                    
                    
                    
                        //Commented means is is visible
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingID"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingNumber"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingTypeID"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingName"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingSeller"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingLink"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("InstrumentID"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ViseID"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingImage"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMaterialID"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingDescription"));
                    
                        //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMass"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPriceTypeID"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPrice"));
                    
                        clampingTableView->hideColumn(tableModel->fieldIndex("ClampingAddedDateTime"));
                    
                    
                    
                    
                    
                    
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(3,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(4,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(5,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(6,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(7,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(8,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(9,QHeaderView::ResizeToContents);
                    
                        clampingTableView->horizontalHeader()->setSectionResizeMode(10,QHeaderView::ResizeToContents);
                    
                    
                    
                    
                    
                    
                    
                        int rowTotalWidth = 0;
                    
                    
                    
                        int count = clampingTableView->horizontalHeader()->count();
                    
                    
                    
                        for(int i = 0; i<count;++i)
                    
                        {
                    
                            if(!clampingTableView->horizontalHeader()->isSectionHidden(i))
                    
                            {
                    
                                rowTotalWidth += clampingTableView->horizontalHeader()->sectionSize(i);
                    
                            }
                    
                        }
                    
                    
                    
                        clampingTableView->setMaximumWidth(780);
                

                The result:

                530d2b95-87d5-4053-852c-1ee60185da91-image.png

                As you can see Dimension3 is visible. How can I add Dimension1 and Dimension2? Is it required to add additional columns? Thanks and have a good day.

                J 1 Reply Last reply 23 Mar 2023, 21:26
                0
                • B BushyAxis793
                  23 Mar 2023, 20:46

                  @JonB Thanks for reply. It works! However I have one more question. Is it possible to show a few relation from one table? I have a table:

                  f128bcbd-49c8-4326-9c15-e25caf081e1c-image.png

                  I would like to add:

                  • Dimension1
                  • Dimension2
                  • Dimension3

                  I tried with:

                  
                   tableModel->setTable("clampings");
                      
                          tableModel->setJoinMode(QSqlRelationalTableModel::LeftJoin);
                      
                      
                      
                      
                      
                          tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
                      
                          tableModel->setRelation(4,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                      
                          tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                      
                          tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                      
                          tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
                      
                      
                      
                          tableModel->setHeaderData(1,Qt::Horizontal,tr("Numer ID"));
                      
                          tableModel->setHeaderData(2,Qt::Horizontal,tr("Rodzaj"));
                      
                          tableModel->setHeaderData(3,Qt::Horizontal,tr("Nazwa przyrządu"));
                      
                          tableModel->setHeaderData(4,Qt::Horizontal,tr("Długość [mm]"));
                      
                          tableModel->setHeaderData(5,Qt::Horizontal,tr("Szerokość [mm]"));
                      
                          tableModel->setHeaderData(6,Qt::Horizontal,tr("Wysokość [mm]"));
                      
                          tableModel->setHeaderData(9,Qt::Horizontal,tr("Materiał"));
                      
                          tableModel->setHeaderData(10,Qt::Horizontal,tr("Opis przyrządu"));
                      
                          tableModel->setHeaderData(11,Qt::Horizontal,tr("Masa [kg]"));
                      
                      
                      
                      
                      
                      
                      
                          clampingTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
                      
                          clampingTableView->setFocusPolicy(Qt::NoFocus);
                      
                          clampingTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
                      
                      
                      
                      
                      
                      
                      
                          clampingTableView->setModel(tableModel);
                      
                          tableModel->select();
                      
                      
                      
                      
                      
                      
                      
                      
                      
                          //Commented means is is visible
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingID"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingNumber"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingTypeID"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingName"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingSeller"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingLink"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("InstrumentID"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ViseID"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingImage"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMaterialID"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingDescription"));
                      
                          //clampingTableView->hideColumn(tableModel->fieldIndex("ClampingMass"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPriceTypeID"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingPrice"));
                      
                          clampingTableView->hideColumn(tableModel->fieldIndex("ClampingAddedDateTime"));
                      
                      
                      
                      
                      
                      
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(3,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(4,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(5,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(6,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(7,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(8,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(9,QHeaderView::ResizeToContents);
                      
                          clampingTableView->horizontalHeader()->setSectionResizeMode(10,QHeaderView::ResizeToContents);
                      
                      
                      
                      
                      
                      
                      
                          int rowTotalWidth = 0;
                      
                      
                      
                          int count = clampingTableView->horizontalHeader()->count();
                      
                      
                      
                          for(int i = 0; i<count;++i)
                      
                          {
                      
                              if(!clampingTableView->horizontalHeader()->isSectionHidden(i))
                      
                              {
                      
                                  rowTotalWidth += clampingTableView->horizontalHeader()->sectionSize(i);
                      
                              }
                      
                          }
                      
                      
                      
                          clampingTableView->setMaximumWidth(780);
                  

                  The result:

                  530d2b95-87d5-4053-852c-1ee60185da91-image.png

                  As you can see Dimension3 is visible. How can I add Dimension1 and Dimension2? Is it required to add additional columns? Thanks and have a good day.

                  J Offline
                  J Offline
                  JonB
                  wrote on 23 Mar 2023, 21:26 last edited by JonB
                  #7

                  @BushyAxis793
                  I don't know why your D1/D2 are showing empty while D3 is filled, assuming you are sure they should have values.

                  Try commenting out

                  tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                  

                  Does that make D2 work now??

                  If you comment out

                   tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                  

                  does that make D2 show any value without the relation imposed?

                  B 1 Reply Last reply 24 Mar 2023, 18:01
                  1
                  • J JonB
                    23 Mar 2023, 21:26

                    @BushyAxis793
                    I don't know why your D1/D2 are showing empty while D3 is filled, assuming you are sure they should have values.

                    Try commenting out

                    tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                    

                    Does that make D2 work now??

                    If you comment out

                     tableModel->setRelation(5,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                    

                    does that make D2 show any value without the relation imposed?

                    B Offline
                    B Offline
                    BushyAxis793
                    wrote on 24 Mar 2023, 18:01 last edited by BushyAxis793
                    #8

                    @JonB I noticed that when I set the relation to column 6. it displays correctly, but only one dimension. Example:

                        tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
                        tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                        tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                        tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                        tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
                    

                    The result

                    07f20b5b-2121-4b1d-a5e1-7003d438b4fe-image.png

                    When I set relation for Dimension2 for column 6 it shows data from dimension2 but never all dimensions. I have no idea why.

                    EDIT: I suppouse I have to add additional columns for each dimension.

                    S J 2 Replies Last reply 24 Mar 2023, 19:18
                    0
                    • B BushyAxis793
                      24 Mar 2023, 18:01

                      @JonB I noticed that when I set the relation to column 6. it displays correctly, but only one dimension. Example:

                          tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
                          tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                          tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                          tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                          tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
                      

                      The result

                      07f20b5b-2121-4b1d-a5e1-7003d438b4fe-image.png

                      When I set relation for Dimension2 for column 6 it shows data from dimension2 but never all dimensions. I have no idea why.

                      EDIT: I suppouse I have to add additional columns for each dimension.

                      S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 24 Mar 2023, 19:18 last edited by
                      #9

                      Do all these rows contain all data required ?

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      B 1 Reply Last reply 25 Mar 2023, 05:26
                      1
                      • S SGaist
                        24 Mar 2023, 19:18

                        Do all these rows contain all data required ?

                        B Offline
                        B Offline
                        BushyAxis793
                        wrote on 25 Mar 2023, 05:26 last edited by
                        #10

                        @SGaist Yes. Below is my main table "clampings":

                        aece6057-8aa1-4074-9a18-6499ede0ad4b-image.png

                        1 Reply Last reply
                        0
                        • B BushyAxis793
                          24 Mar 2023, 18:01

                          @JonB I noticed that when I set the relation to column 6. it displays correctly, but only one dimension. Example:

                              tableModel->setRelation(2,QSqlRelation("clampingtypes","ClampingTypeID","ClampingType"));
                              tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                              tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                              tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                              tableModel->setRelation(9,QSqlRelation("materialgenres","GenreID","GenreType"));
                          

                          The result

                          07f20b5b-2121-4b1d-a5e1-7003d438b4fe-image.png

                          When I set relation for Dimension2 for column 6 it shows data from dimension2 but never all dimensions. I have no idea why.

                          EDIT: I suppouse I have to add additional columns for each dimension.

                          J Offline
                          J Offline
                          JonB
                          wrote on 25 Mar 2023, 08:24 last edited by JonB
                          #11

                          @BushyAxis793 said in QSQLRelationalTableModel display relation:

                          tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                          tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                          tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                          

                          I am having trouble understanding what is going on here. Maybe it doesn't help for me that your column display names are in Polish. And I don't understand what you are saying when you write

                          EDIT: I suppouse I have to add additional columns for each dimension.

                          These 3 lines mean: columns #6, #7 & #8 in tableModel each contain an "InstrumentID". The code should use the value in that column in the original table to locate (via InstrumentID) the corresponding row in table instruments. Then it should display from that row InstrumentDimension1/2/3, which must already be columns in instruments.

                          It is a little "unusual" to display more than one column from the foreign key table. I do not know that Qt does not support that for some reason, but maybe for a given QSqlRelation("instruments","InstrumentID", ...), i.e. foreign key table+lookup-column, it only allows one relation with one display column. Hence you only see one of the InstrumentDimension1/2/3 mappings?

                          Although it's not well documented, QSqlRelation actually allows multiple columns to be specified for the "display" column. It might be interesting to see what

                          tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1, InstrumentDimension2, InstrumentDimension3"));
                          

                          produces for you (you may need to comment out the relations for columns #7 & #8). That column type would be string.

                          B 1 Reply Last reply 25 Mar 2023, 10:31
                          0
                          • J JonB
                            25 Mar 2023, 08:24

                            @BushyAxis793 said in QSQLRelationalTableModel display relation:

                            tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1"));
                            tableModel->setRelation(7,QSqlRelation("instruments","InstrumentID","InstrumentDimension2"));
                            tableModel->setRelation(8,QSqlRelation("instruments","InstrumentID","InstrumentDimension3"));
                            

                            I am having trouble understanding what is going on here. Maybe it doesn't help for me that your column display names are in Polish. And I don't understand what you are saying when you write

                            EDIT: I suppouse I have to add additional columns for each dimension.

                            These 3 lines mean: columns #6, #7 & #8 in tableModel each contain an "InstrumentID". The code should use the value in that column in the original table to locate (via InstrumentID) the corresponding row in table instruments. Then it should display from that row InstrumentDimension1/2/3, which must already be columns in instruments.

                            It is a little "unusual" to display more than one column from the foreign key table. I do not know that Qt does not support that for some reason, but maybe for a given QSqlRelation("instruments","InstrumentID", ...), i.e. foreign key table+lookup-column, it only allows one relation with one display column. Hence you only see one of the InstrumentDimension1/2/3 mappings?

                            Although it's not well documented, QSqlRelation actually allows multiple columns to be specified for the "display" column. It might be interesting to see what

                            tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1, InstrumentDimension2, InstrumentDimension3"));
                            

                            produces for you (you may need to comment out the relations for columns #7 & #8). That column type would be string.

                            B Offline
                            B Offline
                            BushyAxis793
                            wrote on 25 Mar 2023, 10:31 last edited by
                            #12

                            @JonB We got it!

                            c4ed476f-c109-4da6-a822-c89c23756ecf-image.png

                            This part of code was a solution:

                            tableModel->setRelation(6,QSqlRelation("instruments","InstrumentID","InstrumentDimension1, InstrumentDimension2, InstrumentDimension3"));
                            

                            Thank you very much!
                            Have a great day :)

                            1 Reply Last reply
                            0
                            • B BushyAxis793 has marked this topic as solved on 25 Mar 2023, 10:31

                            1/12

                            22 Mar 2023, 20:01

                            • Login

                            • Login or register to search.
                            1 out of 12
                            • First post
                              1/12
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved