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. QTableWidget and SQL (dynamic) not working
QtWS25 Last Chance

QTableWidget and SQL (dynamic) not working

Scheduled Pinned Locked Moved Solved General and Desktop
qtablewidgetsqlsqlitequery
12 Posts 3 Posters 5.3k 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.
  • cxamC Offline
    cxamC Offline
    cxam
    wrote on last edited by
    #1

    Hi!
    In my program I have a QTableWidget that shows information queried, this is the code:

       int i = 0;
        while (query.next()) {
            //Establecemos un QTableWidget por cada columna
            ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(0).toString()));
            ui->tableWidget->setItem(i,1,new QTableWidgetItem(query.value(1).toString()));
            ui->tableWidget->setItem(i,2,new QTableWidgetItem(query.value(2).toString()));
            ui->tableWidget->setItem(i,3,new QTableWidgetItem(query.value(3).toString()));
            ui->tableWidget->setItem(i,4,new QTableWidgetItem(query.value(4).toString()));
            ui->tableWidget->setItem(i,5,new QTableWidgetItem(query.value(5).toString()));
            ui->tableWidget->setItem(i,6,new QTableWidgetItem(query.value(6).toString()));
            ui->tableWidget->setItem(i,7,new QTableWidgetItem(query.value(7).toString()));
            i++;
            recCount++;
        }
    

    Unfortunately it only shows 1 result even though the query is correct.

    "i" is the number of the row and "recCount" doesn't has anything to do with the table.

    Thanks in advance

    Stay Hungry, Stay Foolish

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

      Hi,

      You don't add any row to your QTableWidget or did you do before running that loop ?

      Also, why not use a QTableView with QSqlQueryModel ?

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

      cxamC 2 Replies Last reply
      0
      • SGaistS SGaist

        Hi,

        You don't add any row to your QTableWidget or did you do before running that loop ?

        Also, why not use a QTableView with QSqlQueryModel ?

        cxamC Offline
        cxamC Offline
        cxam
        wrote on last edited by
        #3

        @SGaist "i" is the number of rows that add's +1 at the end of the loop

        Stay Hungry, Stay Foolish

        1 Reply Last reply
        0
        • SGaistS SGaist

          Hi,

          You don't add any row to your QTableWidget or did you do before running that loop ?

          Also, why not use a QTableView with QSqlQueryModel ?

          cxamC Offline
          cxamC Offline
          cxam
          wrote on last edited by
          #4

          @SGaist But how QtableView works ?

          Stay Hungry, Stay Foolish

          Joel BodenmannJ 1 Reply Last reply
          0
          • cxamC cxam

            @SGaist But how QtableView works ?

            Joel BodenmannJ Offline
            Joel BodenmannJ Offline
            Joel Bodenmann
            wrote on last edited by
            #5

            I can recommend reading these two articles to not only understand the model/view concept but also how Qt implements it:

            • https://doc.qt.io/qt-5/model-view-programming.html
            • https://doc.qt.io/qt-5/modelview.html

            As @SGaist pointed out there's an existing model that allows you to display SQL query results in a QTableView. The model is called QSqlQueryModel. You'd basically use a QTableView instead of a QTableWidget and use QTableView::setModel() to set the QSqlQueryModel as the model for the table view.

            Industrial process automation software: https://simulton.com
            Embedded Graphics & GUI library: https://ugfx.io

            cxamC 1 Reply Last reply
            0
            • Joel BodenmannJ Joel Bodenmann

              I can recommend reading these two articles to not only understand the model/view concept but also how Qt implements it:

              • https://doc.qt.io/qt-5/model-view-programming.html
              • https://doc.qt.io/qt-5/modelview.html

              As @SGaist pointed out there's an existing model that allows you to display SQL query results in a QTableView. The model is called QSqlQueryModel. You'd basically use a QTableView instead of a QTableWidget and use QTableView::setModel() to set the QSqlQueryModel as the model for the table view.

              cxamC Offline
              cxamC Offline
              cxam
              wrote on last edited by
              #6

              @Joel-Bodenmann I tried to use QTableView but actually it would break a lot of my code so unless it's completely necessary I won't use it. I'm focusing on trying to solve my current issue.

              Stay Hungry, Stay Foolish

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

                What would break ?

                In any case, I don't see you creating new rows. The incrementation of i doesn't mean your QTableWidget will have an additional row unless you did it before your while loop.

                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
                • cxamC cxam

                  @Joel-Bodenmann I tried to use QTableView but actually it would break a lot of my code so unless it's completely necessary I won't use it. I'm focusing on trying to solve my current issue.

                  Joel BodenmannJ Offline
                  Joel BodenmannJ Offline
                  Joel Bodenmann
                  wrote on last edited by Joel Bodenmann
                  #8

                  @cxam QTableWidget actually inherits from QTableView so it shouldn't break anything in terms of the GUI. In terms of the data handling: You just outsource that to the model. As there's an existing model that is designed specifically for handling SQL queries I can imagine that the only thing it would do is drastically simplify your life.
                  The QTableWidget really is just a QTableView with an internal model. That model is a generic model. Using the QTableView would allow you to use the SQL query specific QSqlQueryModel.

                  @SGaist QTableWidget::setItem() actually creates the row internally.

                  Industrial process automation software: https://simulton.com
                  Embedded Graphics & GUI library: https://ugfx.io

                  cxamC 1 Reply Last reply
                  1
                  • Joel BodenmannJ Joel Bodenmann

                    @cxam QTableWidget actually inherits from QTableView so it shouldn't break anything in terms of the GUI. In terms of the data handling: You just outsource that to the model. As there's an existing model that is designed specifically for handling SQL queries I can imagine that the only thing it would do is drastically simplify your life.
                    The QTableWidget really is just a QTableView with an internal model. That model is a generic model. Using the QTableView would allow you to use the SQL query specific QSqlQueryModel.

                    @SGaist QTableWidget::setItem() actually creates the row internally.

                    cxamC Offline
                    cxamC Offline
                    cxam
                    wrote on last edited by
                    #9

                    @Joel-Bodenmann Hmm I see. I'll check it out then, thanks for your help.

                    Stay Hungry, Stay Foolish

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

                      @Joel-Bodenmann No it doesn't. First thing done, it checks whether the row, column combination returns a valid index if not then it returns immediately.

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

                      Joel BodenmannJ cxamC 2 Replies Last reply
                      0
                      • SGaistS SGaist

                        @Joel-Bodenmann No it doesn't. First thing done, it checks whether the row, column combination returns a valid index if not then it returns immediately.

                        Joel BodenmannJ Offline
                        Joel BodenmannJ Offline
                        Joel Bodenmann
                        wrote on last edited by
                        #11

                        @SGaist Yes, you are correct. I am sorry for giving wrong information.

                        @cxam So as @SGaist pointed out in his first post: Make sure that your QTableWidget "has enough rows".
                        But anyway, I'd still recommend going with QTableView and QSqlQueryModel in your case.

                        Industrial process automation software: https://simulton.com
                        Embedded Graphics & GUI library: https://ugfx.io

                        1 Reply Last reply
                        0
                        • SGaistS SGaist

                          @Joel-Bodenmann No it doesn't. First thing done, it checks whether the row, column combination returns a valid index if not then it returns immediately.

                          cxamC Offline
                          cxamC Offline
                          cxam
                          wrote on last edited by
                          #12

                          @SGaist Indeed, you're right When I set the properties for my table I set that the number of rows was "1" so I have to create an "int" variable and then say that the number of rows is that variable starting from 1 and then increment that number on the loop.

                          Stay Hungry, Stay Foolish

                          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