Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. tableWidget question
Qt 6.11 is out! See what's new in the release blog

tableWidget question

Scheduled Pinned Locked Moved Unsolved General and Desktop
23 Posts 6 Posters 7.0k Views 2 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #6

    Hi,

    That is nothing specific to Qt. It's C++ inheritance.

    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
    2
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #7

      Hi
      A delegate is a helper class that can draw the cell and/or also allows editing.
      Here is an example of a special one. Like a rating bar with stars
      https://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

      You can see how to make one for a combobox here
      https://wiki.qt.io/Combo_Boxes_in_Item_Views
      This way can be used with any Widget you want. In the CreateEditor you just create another one. rest of code is much the same.

      For the checkbox, you can actually set on the Items you insert that they can be checked ( like a checkbox)

      QTableWidgetItem *item2 = new QTableWidgetItem("Item2");
      item2->setCheckState(Qt::Checked); // or unchecked
      tableWidget->setItem(0, 0, item2);
      
      J 1 Reply Last reply
      2
      • mrjjM mrjj

        Hi
        A delegate is a helper class that can draw the cell and/or also allows editing.
        Here is an example of a special one. Like a rating bar with stars
        https://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

        You can see how to make one for a combobox here
        https://wiki.qt.io/Combo_Boxes_in_Item_Views
        This way can be used with any Widget you want. In the CreateEditor you just create another one. rest of code is much the same.

        For the checkbox, you can actually set on the Items you insert that they can be checked ( like a checkbox)

        QTableWidgetItem *item2 = new QTableWidgetItem("Item2");
        item2->setCheckState(Qt::Checked); // or unchecked
        tableWidget->setItem(0, 0, item2);
        
        J Offline
        J Offline
        jenya7
        wrote on last edited by
        #8
        This post is deleted!
        J 1 Reply Last reply
        0
        • J jenya7

          This post is deleted!

          J Offline
          J Offline
          jenya7
          wrote on last edited by jenya7
          #9

          @jenya7 said in tableWidget question:

          @mrjj said in tableWidget question:

          Hi
          A delegate is a helper class that can draw the cell and/or also allows editing.
          Here is an example of a special one. Like a rating bar with stars
          https://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

          You can see how to make one for a combobox here
          https://wiki.qt.io/Combo_Boxes_in_Item_Views
          This way can be used with any Widget you want. In the CreateEditor you just create another one. rest of code is much the same.

          For the checkbox, you can actually set on the Items you insert that they can be checked ( like a checkbox)

          QTableWidgetItem *item2 = new QTableWidgetItem("Item2");
          item2->setCheckState(Qt::Checked); // or unchecked
          tableWidget->setItem(0, 0, item2);
          

          Thank you. The first argument is a row number. But tableWidget is not populated yet. I start to add rows and on every row I should call tableWidget->setItem(row_num, 0, item2); ?

          JonBJ 1 Reply Last reply
          0
          • J jenya7

            @jenya7 said in tableWidget question:

            @mrjj said in tableWidget question:

            Hi
            A delegate is a helper class that can draw the cell and/or also allows editing.
            Here is an example of a special one. Like a rating bar with stars
            https://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

            You can see how to make one for a combobox here
            https://wiki.qt.io/Combo_Boxes_in_Item_Views
            This way can be used with any Widget you want. In the CreateEditor you just create another one. rest of code is much the same.

            For the checkbox, you can actually set on the Items you insert that they can be checked ( like a checkbox)

            QTableWidgetItem *item2 = new QTableWidgetItem("Item2");
            item2->setCheckState(Qt::Checked); // or unchecked
            tableWidget->setItem(0, 0, item2);
            

            Thank you. The first argument is a row number. But tableWidget is not populated yet. I start to add rows and on every row I should call tableWidget->setItem(row_num, 0, item2); ?

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #10

            @jenya7
            You can only do that once the row, row_num, exists in the table. You will need to have called https://doc.qt.io/qt-5/qtablewidget.html#insertRow to insert the row(s) beforehand.

            1 Reply Last reply
            2
            • mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #11

              Hi
              This might come in handy
              https://wiki.qt.io/How_to_Use_QTableWidget

              J 1 Reply Last reply
              1
              • mrjjM mrjj

                Hi
                This might come in handy
                https://wiki.qt.io/How_to_Use_QTableWidget

                J Offline
                J Offline
                jenya7
                wrote on last edited by
                #12

                @mrjj said in tableWidget question:

                Hi
                This might come in handy
                https://wiki.qt.io/How_to_Use_QTableWidget

                Thank you. One more question - after populating the table - how can I check/uncheck a check box in a row or to check a check box state?

                mrjjM 1 Reply Last reply
                0
                • J jenya7

                  @mrjj said in tableWidget question:

                  Hi
                  This might come in handy
                  https://wiki.qt.io/How_to_Use_QTableWidget

                  Thank you. One more question - after populating the table - how can I check/uncheck a check box in a row or to check a check box state?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by mrjj
                  #13

                  @jenya7
                  Hi
                  There is https://doc.qt.io/qt-5/qtablewidget.html#item
                  where you can access the items to check or uncheck it.

                  But often you use some of the signals
                  like
                  https://doc.qt.io/qt-5/qtablewidget.html#itemChanged
                  and there you directly get the item.

                  J 1 Reply Last reply
                  1
                  • mrjjM mrjj

                    @jenya7
                    Hi
                    There is https://doc.qt.io/qt-5/qtablewidget.html#item
                    where you can access the items to check or uncheck it.

                    But often you use some of the signals
                    like
                    https://doc.qt.io/qt-5/qtablewidget.html#itemChanged
                    and there you directly get the item.

                    J Offline
                    J Offline
                    jenya7
                    wrote on last edited by
                    #14

                    @mrjj said in tableWidget question:

                    @jenya7
                    Hi
                    There is https://doc.qt.io/qt-5/qtablewidget.html#item
                    where you can access the items to check or uncheck it.

                    But often you use some of the signals
                    like
                    https://doc.qt.io/qt-5/qtablewidget.html#itemChanged
                    and there you directly get the item.

                    Thank you.

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      jenya7
                      wrote on last edited by
                      #15

                      I did so

                      void sys::ParamLoadToTable(QTableWidget *table, int rows)
                      {
                      
                          QTableWidgetItem item;
                      
                          table->setRowCount(rows);
                      
                          for (int i = 0; i < rows; i++)
                          {
                              auto box = new QCheckBox();
                              box->setCheckState(Qt::Unchecked);
                      
                              table->setCellWidget(i, 3, box);
                      
                              item.setText(param_list[i].name);
                              table->setItem(i, 1, &item);
                          }
                      }
                      

                      I see all rows but column 1 (name) is empty.

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        jenya7
                        wrote on last edited by
                        #16

                        OK. This way it works

                        for (int i = 0; i < rows; i++)
                            {
                                auto box = new QCheckBox();
                                box->setCheckState(Qt::Unchecked);
                        
                                table->setCellWidget(i, 3, box);
                        
                                 QTableWidgetItem  * item1 = new QTableWidgetItem();
                                 table->setItem(i, 1, item1);
                               
                                 QTableWidgetItem  * item2 = new QTableWidgetItem();
                                  table->setItem(i, 2, item2);
                        
                                item1->setText(param_list[i].name);
                                item2->setText(param_list[i].value);
                            }
                        
                        1 Reply Last reply
                        0
                        • J Offline
                          J Offline
                          jenya7
                          wrote on last edited by
                          #17

                          How can I check if a check box in the 4-th column is set?

                          mrjjM 1 Reply Last reply
                          0
                          • J jenya7

                            How can I check if a check box in the 4-th column is set?

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #18

                            @jenya7
                            Hi
                            You can use
                            https://doc.qt.io/qt-5/qtablewidget.html#cellWidget
                            to gain access to the checkbox.

                            J 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @jenya7
                              Hi
                              You can use
                              https://doc.qt.io/qt-5/qtablewidget.html#cellWidget
                              to gain access to the checkbox.

                              J Offline
                              J Offline
                              jenya7
                              wrote on last edited by
                              #19

                              @mrjj said in tableWidget question:

                              @jenya7
                              Hi
                              You can use
                              https://doc.qt.io/qt-5/qtablewidget.html#cellWidget
                              to gain access to the checkbox.

                               QWidget *box = table->cellWidget(i, 3);
                              

                              Then what? How do I get the check box state from the object?

                              mrjjM 1 Reply Last reply
                              0
                              • Christian EhrlicherC Offline
                                Christian EhrlicherC Offline
                                Christian Ehrlicher
                                Lifetime Qt Champion
                                wrote on last edited by
                                #20

                                @jenya7 said in tableWidget question:

                                How do I get the check box state from the object?

                                Try to cast it to a QCheckBox (with e.g. dynamic_cast or Qt's specific qobject_cast) and retrieve the information.

                                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                                Visit the Qt Academy at https://academy.qt.io/catalog

                                1 Reply Last reply
                                2
                                • J jenya7

                                  @mrjj said in tableWidget question:

                                  @jenya7
                                  Hi
                                  You can use
                                  https://doc.qt.io/qt-5/qtablewidget.html#cellWidget
                                  to gain access to the checkbox.

                                   QWidget *box = table->cellWidget(i, 3);
                                  

                                  Then what? How do I get the check box state from the object?

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by mrjj
                                  #21

                                  @jenya7
                                  Hi
                                  It returns a base Widget pointer so you need to cast it.

                                  QCheckBox * checkbox = qobject_cast<QCheckBox * > (table->cellWidget(i, 3)) ;
                                  if (checkbox) { // must check. can be NULL
                                  if ( checkbox->isChecked() ) ....
                                  }

                                  J 1 Reply Last reply
                                  3
                                  • mrjjM mrjj

                                    @jenya7
                                    Hi
                                    It returns a base Widget pointer so you need to cast it.

                                    QCheckBox * checkbox = qobject_cast<QCheckBox * > (table->cellWidget(i, 3)) ;
                                    if (checkbox) { // must check. can be NULL
                                    if ( checkbox->isChecked() ) ....
                                    }

                                    J Offline
                                    J Offline
                                    jenya7
                                    wrote on last edited by
                                    #22

                                    @mrjj said in tableWidget question:

                                    @jenya7
                                    Hi
                                    It returns a base Widget pointer so you need to cast it.

                                    QCheckBox * checkbox = qobject_cast<QCheckBox * > (table->cellWidget(i, 3)) ;
                                    if (checkbox) { // must check. can be NULL
                                    if ( checkbox->isChecked() ) ....
                                    }

                                    Thank you.

                                    1 Reply Last reply
                                    0
                                    • JonBJ JonB

                                      @jenya7
                                      Yes, you should do so via https://doc.qt.io/qt-5/qabstractitemview.html#setItemDelegateForColumn with a https://doc.qt.io/qt-5/qstyleditemdelegate.html which you write for each of the desired column types.

                                      Although you might be tempted to use https://doc.qt.io/qt-5/qabstractitemview.html#setIndexWidget, you will have @VRonin descending on you like a ton of bricks here if you do so :)

                                      VRoninV Offline
                                      VRoninV Offline
                                      VRonin
                                      wrote on last edited by
                                      #23

                                      @JonB said in tableWidget question:

                                      you might be tempted to use https://doc.qt.io/qt-5/qabstractitemview.html#setIndexWidget, you will have @VRonin descending on you like a ton of bricks here if you do so

                                      And here I am!

                                      Also QCheckBox is the worst excuse to use this method. It's much easier to do without a widget.

                                      To activate a checkbox in a cell you can just call:

                                      QTableWidgetItem  *checkBoxitem = new QTableWidgetItem;
                                      checkBoxitem->setCheckState(Qt::Unchecked); // displays the checkbox as unchecked
                                      checkBoxitem->setFlags(checkBoxitem->flags() | Qt::ItemIsUserCheckable); // allows the user to click on the checkbox
                                      table->setItem(i, 3, checkBoxitem);
                                      

                                      You can then check the item state using item->checkState() or widget->model()->index(row,column).data(Qt::CheckStateRole)

                                      "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

                                      1 Reply Last reply
                                      3

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt
                                      • Unsolved