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. tableWidget question
Forum Updated to NodeBB v4.3 + New Features

tableWidget question

Scheduled Pinned Locked Moved Unsolved General and Desktop
23 Posts 6 Posters 2.7k 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.
  • J jenya7

    I want to set the first column as a text box, the second as a combo box and third as a check box.
    Can I do it with the widget?

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

    @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 :)

    J VRoninV 2 Replies Last reply
    2
    • 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 :)

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

      @JonB
      Didn't understand much from the documentation how I apply all this specifically to a tableWidget.

      JonBJ 1 Reply Last reply
      0
      • J jenya7

        @JonB
        Didn't understand much from the documentation how I apply all this specifically to a tableWidget.

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

        @jenya7
        A QTableWidget is derived from a QAbstractItemView so these methods are available (https://doc.qt.io/qt-5/qtablewidget-members.html). There is nothing special about it being a QTableWidget.

        J 1 Reply Last reply
        1
        • JonBJ JonB

          @jenya7
          A QTableWidget is derived from a QAbstractItemView so these methods are available (https://doc.qt.io/qt-5/qtablewidget-members.html). There is nothing special about it being a QTableWidget.

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

          @JonB said in tableWidget question:

          @jenya7
          A QTableWidget is derived from a QAbstractItemView so these methods are available (https://doc.qt.io/qt-5/qtablewidget-members.html). There is nothing special about it being a QTableWidget.

          It's all foreign language to me. I am completely new in Qt.

          1 Reply Last reply
          0
          • 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

                                          • Login

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