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. Map multiple rows with multiple widgets
QtWS25 Last Chance

Map multiple rows with multiple widgets

Scheduled Pinned Locked Moved Solved General and Desktop
map
9 Posts 4 Posters 2.6k Views
  • 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.
  • M Offline
    M Offline
    Mr. Kibu
    wrote on last edited by Mr. Kibu
    #1

    Hi,

    I have got a QSqlTableModel with multiple rows (e.g. 3 rows). Now I want to map the data with multiple widgets. Each row should map to one widget, the mapped widget should be placed horizontal side by side. It should look like this:

    tree widgets

    I create the widgets side by side like this:

        numberOfRows = model->rowCount();
    
        // add a widget for each row
        for (int i=0;i<numberOfRows;++i)
        {
            myWidget = new RowWidget();
            ui->QLayout->addWidget(myWidget);
        }
    

    How do I map the data with the widgets, to show in one widget the data of one row (and if I edit the data in the widget the result will be submited to the database)

    Thank you!

    Franz

    1 Reply Last reply
    0
    • M Offline
      M Offline
      michelson
      wrote on last edited by
      #2

      I would do it in the myWidget constructor, just add parameters for everything you need, assuming the link you provided constructor canlook like:

      explicit  myWidget(QString row1, int row2, double row2, QWidget* parent = 0);
      

      and than just bind data when creating them in for loop.

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #3

        Hi,

        Looks like a job for QDataWidgetMapper

        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
        3
        • M Offline
          M Offline
          Mr. Kibu
          wrote on last edited by
          #4

          Yes, I thought also in this direction. I have tried this:

              numberOfRows = model->rowCount();
          
              mapper = new QDataWidgetMapper(this);
              mapper->setModel(model);
              mapper->setItemDelegate(new QSqlRelationalDelegate(mapper));
          
              // add a widget for each row
              for (int i=0;i<numberOfRows;++i)
              {
                  myWidget = new RowWidget();
                  ui->QLayout->addWidget(myWidget);
          
                  mapper->addMapping(myWidget->SpinBox,2);
                  mapper->addMapping(myWidget->DoubleSpinBox,3);
              }
          
             mapper->toFirst();
          

          But the code above did not worked correct (I have in every widget the data of the last row!!). How do I install the mapper to have in every widget the data of one row?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Use one mapper per RowWidget.

            One solution would be to have the mapper itself in RowWidget, have a setModel and a setRow method also in RowWidget so you can build them and change the row used by the mapper as you wish.

            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
            • M Offline
              M Offline
              Mr. Kibu
              wrote on last edited by
              #6

              I did it! I added the QDataWidgetMapper in the constructor of RowWidget. On creating the myWidget in the for loop, I commit the rowID of the row which is shown in the widget.

              Thanks to all!

              kshegunovK 1 Reply Last reply
              0
              • M Mr. Kibu

                I did it! I added the QDataWidgetMapper in the constructor of RowWidget. On creating the myWidget in the for loop, I commit the rowID of the row which is shown in the widget.

                Thanks to all!

                kshegunovK Offline
                kshegunovK Offline
                kshegunov
                Moderators
                wrote on last edited by
                #7

                @Mr.-Kibu
                Have in mind that QDataWidgetMapper has a known bug/deficiency when working with relational sql model and having a combo box for the foreign key.

                Read and abide by the Qt Code of Conduct

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  Mr. Kibu
                  wrote on last edited by
                  #8

                  Thank you for the info, I don't know that. Where can I get more informations about this bug?

                  kshegunovK 1 Reply Last reply
                  0
                  • M Mr. Kibu

                    Thank you for the info, I don't know that. Where can I get more informations about this bug?

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by kshegunov
                    #9

                    @Mr.-Kibu
                    Take a look at this thread.

                    EDIT: Also this bug report.

                    Read and abide by the Qt Code of Conduct

                    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