Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Unsolved i cannot check my QPushbutton that is in my qtableview

    General and Desktop
    3
    32
    1191
    Loading More Posts
    • 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.
    • A
      aftalib last edited by

      Hello, i'm working on a interface using a Qtableview and i put a QPushButton in a QTableView using this :
      QPushButton* H11 = new QPushButton("H1");
      index = m_table_space_pos->index(1,1,QModelIndex());
      ui->tablespacepos->setIndexWidget(index, H11);
      ui->H11->setCheckable(true);
      connect(ui->H11,SIGNAL(clicked()),this,SLOT(on_H11_clicked()));

      the connect is supposed to change the text of the button. the thing is when i click on it nothing happens. thanks to the outputs i made i know that my button IS Checkable, but it doesnt change to true when i click on it. any ideas of where this comes from ?

      thank you in advance.

      JonB 1 Reply Last reply Reply Quote 0
      • JonB
        JonB @aftalib last edited by

        @aftalib said in i cannot check my QPushbutton that is in my qtableview:

        QPushButton* H11 = new QPushButton("H1");
        ui->H11->setCheckable(true);
        

        H11 is a local variable. ui->H11 is something else. How are they the same button?

        A 1 Reply Last reply Reply Quote 6
        • A
          aftalib @JonB last edited by

          @JonB oh wow thank you, i didnt realize this. i indeed had a button that was also named H11 in my interface and that's why it was misleading.

          so now that i have changed ui->H11 to H11 in my code i see that my button is being checked but the code in the connect does not run

          jsulm JonB 2 Replies Last reply Reply Quote 0
          • jsulm
            jsulm Lifetime Qt Champion @aftalib last edited by

            @aftalib said in i cannot check my QPushbutton that is in my qtableview:

            but the code in the connect does not run

            Use the new Qt5 connect syntax (without SGINAL/SLOT macros) to make sure the connect actually succeeded.

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

            1 Reply Last reply Reply Quote 0
            • JonB
              JonB @aftalib last edited by JonB

              @aftalib
              Show your code now.

              1 Reply Last reply Reply Quote 0
              • A
                aftalib last edited by aftalib

                here's the code of my connect : 5a3e3da9-fcf0-46ac-a75d-60ec2c01f439-image.png

                @jsulm , this doesnt seem to work : Qt says that clicked() is an undeclared identifier when i take off SIGNAL/SLOT

                my code now runs but only with the last button of the row.i suppose it's because the connect keeps assigning to the next button as the loop goes forward. is there a way to assign the connect() to each button on the loop ?

                JonB 1 Reply Last reply Reply Quote 0
                • JonB
                  JonB @aftalib last edited by

                  @aftalib said in i cannot check my QPushbutton that is in my qtableview:

                  Qt says that clicked() is an undeclared identifier when i take off SIGNAL/SLOT

                  You have to read and act on https://wiki.qt.io/New_Signal_Slot_Syntax.

                  here's the code of my connect

                  You show no connect() statement. You show your proposed slot code instead.

                  A 1 Reply Last reply Reply Quote 1
                  • A
                    aftalib @JonB last edited by

                    @JonB sorry, here's my connect() : d21ee820-b557-4b71-84f2-49c37338c200-image.png

                    thank you, i'm going to read this

                    JonB 1 Reply Last reply Reply Quote 0
                    • JonB
                      JonB @aftalib last edited by JonB

                      @aftalib
                      Earlier I only see:

                      index = m_table_space_pos->index(1,1,QModelIndex());
                      

                      I do not see where you are creating QPushButtons in a loop, putting each one into the table, and connecting each one to the slot. I see you only addressing (1, 1) in the table.

                      Further, the slot only looks at one H11 variable. I do not know how that H11 relates to each of the push buttons you created.

                      If you seem to intend AntArrayDialog::on_H11_clicked() slot to handle any of the buttons pressed (connect()ed to each one), it is going to need to know which button was clicked. And that will require you to use a C++ lambda for the connection, to pass which button was clicked as a parameter to the slot....

                      Start by just verifying your slot gets called for any button clicked, not just one button....

                      A 1 Reply Last reply Reply Quote 1
                      • A
                        aftalib @JonB last edited by aftalib

                        @JonB my bad i hadnt updated my code at the time because i was doing tests to see if it was working for one button but i replaced (1,1) with (1,i) so i indeed have a row of buttons.
                        my slot gets called for the last button that is in the row of my TableView

                        i'm going to see about the C++ lambda you're talking about, it might be the solution i was looking for

                        1 Reply Last reply Reply Quote 0
                        • A
                          aftalib last edited by

                          so C++ lambda might be the way to relate to each of the QPushButtons i created with my loop ?

                          JonB 1 Reply Last reply Reply Quote 0
                          • JonB
                            JonB @aftalib last edited by JonB

                            @aftalib
                            You will need the lambda when you are ready to have the single slot code method handle the clicking of any of the push buttons, which I suspect is what you will want to achieve.

                            However, before you do that, put a qDebug() << "clicked" in as the first statement in the slot. Verify that gets called when any of the buttons you created are clicked, not just one button. Only at that point are you ready to move to a lambda for the slot which will pass which button was pressed as a parameter to the slot....

                            A 1 Reply Last reply Reply Quote 1
                            • A
                              aftalib @JonB last edited by aftalib

                              @JonB okay, the slot gets called of any of the buttons i have created, i have the "clicked" output on each of the buttons

                              JonB 1 Reply Last reply Reply Quote 0
                              • JonB
                                JonB @aftalib last edited by JonB

                                @aftalib
                                And have you used the new style syntax I referred you to earlier? Show your connect() statement now.

                                A 1 Reply Last reply Reply Quote 0
                                • A
                                  aftalib @JonB last edited by

                                  @JonB i dont think i got it right.. the IDE still says that clicked() is an undeclared identifier.. 5d0c7d30-3cdf-4f64-a2c0-8429bc0d725f-image.png

                                  JonB jsulm 2 Replies Last reply Reply Quote 0
                                  • JonB
                                    JonB @aftalib last edited by

                                    @aftalib
                                    I said to you earlier:

                                    You have to read and act on https://wiki.qt.io/New_Signal_Slot_Syntax.

                                    but you do not seem to have done anything about this....

                                    A 1 Reply Last reply Reply Quote 1
                                    • A
                                      aftalib @JonB last edited by

                                      @JonB no i did check this in order to do the new connect statement but i dont get how am i supposed to write this with what is written on this page

                                      JonB 1 Reply Last reply Reply Quote 0
                                      • jsulm
                                        jsulm Lifetime Qt Champion @aftalib last edited by

                                        @aftalib Please post text not screen shots.

                                        connect(H11, &QPushButton::clicked, this, &WHAT_EVER_THIS_TYPE_IS::on_H11_clicked);
                                        

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

                                        1 Reply Last reply Reply Quote 3
                                        • JonB
                                          JonB @aftalib last edited by JonB

                                          @aftalib
                                          The very first section there shows an example of changing from SIGNAL/SLOT() macros

                                          connect(
                                              sender, SIGNAL( valueChanged( QString, QString ) ),
                                              receiver, SLOT( updateValue( QString ) )
                                          );
                                          

                                          over to

                                          connect(
                                              sender, &Sender::valueChanged,
                                              receiver, &Receiver::updateValue
                                          );
                                          

                                          The code you have pasted does not attempt to follow that required pattern.

                                          1 Reply Last reply Reply Quote 1
                                          • A
                                            aftalib last edited by

                                            okay thats my bad i didnt quite understand the syntax that was written in the new connect statement but i think i got it now, thank you. here's what i wrote :

                                                     connect(H11, &QPushButton::clicked,this,&AntArrayDialog::on_H11_clicked);
                                            
                                            

                                            i dont get any errors and the program launches well

                                            JonB 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post