Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Accessing specific controls from widgets
Qt 6.12 LTS is out! See what's new in the release blog

Accessing specific controls from widgets

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 4 Posters 2.7k Views 1 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.
  • jsulmJ jsulm

    @IknowQT said in Accessing specific controls from widgets:

    You want to access the PchkItem inside the pChkWidget.

    I already wrote you that you need to cast QWidget* to the type you need.
    Did you actually read my response?

    I Offline
    I Offline
    IknowQT
    wrote on last edited by
    #5

    @jsulm

    for (int i = 0; i < this->ui.fileTableWidget->rowCount(); i++)
    {
    usrCheckBox* pChkItem = static_cast<usrCheckBox*>(this->ui.fileTableWidget->cellWidget(i, 0));
    qDebug() << "GetSelectedItems()"<< pChkItem->GetCheckID();
    }

    I tested it like this.
    I didn't get the results I wanted.

    Casting the widget doesn't seem to work.

    jsulmJ 1 Reply Last reply
    0
    • I IknowQT

      @jsulm

      for (int i = 0; i < this->ui.fileTableWidget->rowCount(); i++)
      {
      usrCheckBox* pChkItem = static_cast<usrCheckBox*>(this->ui.fileTableWidget->cellWidget(i, 0));
      qDebug() << "GetSelectedItems()"<< pChkItem->GetCheckID();
      }

      I tested it like this.
      I didn't get the results I wanted.

      Casting the widget doesn't seem to work.

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #6

      @IknowQT You should really read more carefully! I suggested to use https://doc.qt.io/qt-6/qobject.html#qobject_cast-1 for casting, not static_cast.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      I 1 Reply Last reply
      2
      • jsulmJ jsulm

        @IknowQT You should really read more carefully! I suggested to use https://doc.qt.io/qt-6/qobject.html#qobject_cast-1 for casting, not static_cast.

        I Offline
        I Offline
        IknowQT
        wrote on last edited by
        #7

        @jsulm

        usrCheckBox* pChkItem = qobject_cast<usrCheckBox*>(this->ui.fileTableWidget->cellWidget(i, 0));
        

        I tested it, but it comes out as Null after casting.
        I don't think there is any way to access this

        jsulmJ 1 Reply Last reply
        0
        • C Offline
          C Offline
          ChrisW67
          wrote on last edited by
          #8

          Yes, that is because the cell widget is not of type usrCheckBox.

          1 Reply Last reply
          1
          • I IknowQT

            @jsulm

            usrCheckBox* pChkItem = qobject_cast<usrCheckBox*>(this->ui.fileTableWidget->cellWidget(i, 0));
            

            I tested it, but it comes out as Null after casting.
            I don't think there is any way to access this

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #9

            @IknowQT said in Accessing specific controls from widgets:

            I don't think there is any way to access this

            Of course there is, but as @ChrisW67 wrote: what this->ui.fileTableWidget->cellWidget(i, 0) returns is apparently not an usrCheckBox...

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            I 1 Reply Last reply
            1
            • jsulmJ jsulm

              @IknowQT said in Accessing specific controls from widgets:

              I don't think there is any way to access this

              Of course there is, but as @ChrisW67 wrote: what this->ui.fileTableWidget->cellWidget(i, 0) returns is apparently not an usrCheckBox...

              I Offline
              I Offline
              IknowQT
              wrote on last edited by
              #10

              @jsulm

              QWidget* pChkWidget = new QWidget();
              

              If I do setCellWidget after declaring it as usrCheckBox without declaring it as qwidget, it seems to come out as I want.

              But I have to use Layout. please see my code

              JonBJ jsulmJ 2 Replies Last reply
              0
              • I IknowQT

                @jsulm

                QWidget* pChkWidget = new QWidget();
                

                If I do setCellWidget after declaring it as usrCheckBox without declaring it as qwidget, it seems to come out as I want.

                But I have to use Layout. please see my code

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

                @IknowQT
                Please be logical about this, and examine your own code. So far as I can see, glancing, I think you have a hierarchy like:

                setCellWidget(nRowIndex, 0, pChkWidget);
                    QWidget* pChkWidget = new QWidget()
                        QHBoxLayout* layout = new QHBoxLayout(pChkWidget);
                            usrCheckBox* pChkItem = new usrCheckBox(pChkWidget);
                

                So clearly picking up the cellWidget() is not going to return your usrCheckBox, it is going to return your pChkWidget, right?

                So from there to get to the usrCheckBox you must start from that widget and then use one of:

                • Find its child QHBoxLayout, find the child QWidget which is on that, and cast that to usrCheckBox*; or
                • Call QObject::findChild<usrCheckBox*>() on it to let it find the (first) descendant which is of type usrCheckBox*.
                1 Reply Last reply
                2
                • I IknowQT

                  @jsulm

                  QWidget* pChkWidget = new QWidget();
                  

                  If I do setCellWidget after declaring it as usrCheckBox without declaring it as qwidget, it seems to come out as I want.

                  But I have to use Layout. please see my code

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #12

                  @IknowQT So, in fact you're setting pChkWidget (which is a QWidget) as cell widget, right? Then why do you expect this->ui.fileTableWidget->cellWidget(i, 0) to return usrCheckBox?!
                  As @JonB wrote usrCheckBox is a child of pChkWidget. So get pChkWidget first (calling this->ui.fileTableWidget->cellWidget(i, 0)) and then its child usrCheckBox.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  1
                  • C Offline
                    C Offline
                    ChrisW67
                    wrote on last edited by
                    #13

                    Another approach would be to define your own widget class that exposes the state of the check box it contains.

                    class FancyCellWidget: pubic QWidget {
                      Q_OBJECT
                    public:
                      explicit FancyCellWidget(QWidget *p = nullptr);
                      Qt::CheckState 	checkState() const; // just return this from the internal QCheckbox
                      void 	setCheckState(Qt::CheckState state); // pass through to the internal QCheckbox
                      ...
                    signals:
                      void clicked(); // connect the internal check box clicked() signal to this one in the constructor
                    };
                    

                    and then use that to create your cell widget.

                    1 Reply Last reply
                    0
                    • I IknowQT

                      @IknowQT said in Accessing specific controls from widgets:

                      젯으로 액세스하여 컨트롤에 액세스하는 방법이 있습니까?

                      Inside the widget of pChkWidget is the pChkItem control.
                      The return value of this->ui.fileTableWidget->cellWidget(row, col) is Widget.
                      You want to access the PchkItem inside the pChkWidget.

                      I Offline
                      I Offline
                      IknowQT
                      wrote on last edited by IknowQT
                      #14

                      @jsulm

                      @jsulm said in Accessing specific controls from widgets:

                      Yes. What exactly is the problem?
                      I think you need to cast from QWidget* to what ever the widget actually is (https://doc.qt.io/qt-6/qobject.html#qobject_cast-1).

                      @IknowQT said in Accessing specific controls from widgets:

                      Inside the widget of pChkWidget is the pChkItem control.
                      The return value of this->ui.fileTableWidget->cellWidget(row, col) is Widget.
                      You want to access the PchkItem inside the pChkWidget.

                      You recommended objectcast.
                      I said clearly. I have a Checkbox control inside a Widget, so if I cast an object, does it become a checkbox?

                      I showed the test results. Returning as null is a natural result.
                      I think you suggested just object cast without looking closely at the code you asked in the first place.

                      @JonB
                      I was able to access that control using findChild, which Jonby recommended.

                      jsulmJ 1 Reply Last reply
                      0
                      • I IknowQT

                        @jsulm

                        @jsulm said in Accessing specific controls from widgets:

                        Yes. What exactly is the problem?
                        I think you need to cast from QWidget* to what ever the widget actually is (https://doc.qt.io/qt-6/qobject.html#qobject_cast-1).

                        @IknowQT said in Accessing specific controls from widgets:

                        Inside the widget of pChkWidget is the pChkItem control.
                        The return value of this->ui.fileTableWidget->cellWidget(row, col) is Widget.
                        You want to access the PchkItem inside the pChkWidget.

                        You recommended objectcast.
                        I said clearly. I have a Checkbox control inside a Widget, so if I cast an object, does it become a checkbox?

                        I showed the test results. Returning as null is a natural result.
                        I think you suggested just object cast without looking closely at the code you asked in the first place.

                        @JonB
                        I was able to access that control using findChild, which Jonby recommended.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #15

                        @IknowQT said in Accessing specific controls from widgets:

                        so if I cast an object, does it become a checkbox

                        Casting does not magically change the type of an object. That's why qobject_cast will return nullptr if the object you're trying to cast is not of the type you want to cast to. Casting only works if the object is really an object of the target type.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        2

                        • Login

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