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
Forum Update on Monday, May 27th 2025

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.
  • C Offline
    C Offline
    cxam
    wrote on 8 Apr 2016, 13:04 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
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 8 Apr 2016, 22:32 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

      C 2 Replies Last reply 9 Apr 2016, 11:04
      0
      • S SGaist
        8 Apr 2016, 22:32

        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 ?

        C Offline
        C Offline
        cxam
        wrote on 9 Apr 2016, 11:04 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
        • S SGaist
          8 Apr 2016, 22:32

          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 ?

          C Offline
          C Offline
          cxam
          wrote on 9 Apr 2016, 11:04 last edited by
          #4

          @SGaist But how QtableView works ?

          Stay Hungry, Stay Foolish

          J 1 Reply Last reply 9 Apr 2016, 14:20
          0
          • C cxam
            9 Apr 2016, 11:04

            @SGaist But how QtableView works ?

            J Offline
            J Offline
            Joel Bodenmann
            wrote on 9 Apr 2016, 14:20 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

            C 1 Reply Last reply 9 Apr 2016, 21:16
            0
            • J Joel Bodenmann
              9 Apr 2016, 14:20

              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.

              C Offline
              C Offline
              cxam
              wrote on 9 Apr 2016, 21:16 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

              J 1 Reply Last reply 9 Apr 2016, 22:14
              0
              • S Offline
                S Offline
                SGaist
                Lifetime Qt Champion
                wrote on 9 Apr 2016, 21:25 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
                • C cxam
                  9 Apr 2016, 21:16

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

                  J Offline
                  J Offline
                  Joel Bodenmann
                  wrote on 9 Apr 2016, 22:14 last edited by Joel Bodenmann 4 Sept 2016, 22:16
                  #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

                  C 1 Reply Last reply 9 Apr 2016, 22:29
                  1
                  • J Joel Bodenmann
                    9 Apr 2016, 22:14

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

                    C Offline
                    C Offline
                    cxam
                    wrote on 9 Apr 2016, 22:29 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
                    • S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 9 Apr 2016, 22:37 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

                      J C 2 Replies Last reply 9 Apr 2016, 22:40
                      0
                      • S SGaist
                        9 Apr 2016, 22:37

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

                        J Offline
                        J Offline
                        Joel Bodenmann
                        wrote on 9 Apr 2016, 22:40 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
                        • S SGaist
                          9 Apr 2016, 22:37

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

                          C Offline
                          C Offline
                          cxam
                          wrote on 10 Apr 2016, 07:06 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

                          10/12

                          9 Apr 2016, 22:37

                          • Login

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