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. ui detect mouse event on objects
Forum Updated to NodeBB v4.3 + New Features

ui detect mouse event on objects

Scheduled Pinned Locked Moved Unsolved General and Desktop
26 Posts 6 Posters 3.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.
  • P Pfanne
    1 May 2024, 16:22

    [WIN10] [MVS2019] [QtV6.3.1]

    Hi,

    in my code I got a lot of checkboxes.

        QCheckBox *IO_1;
        QCheckBox *IO_2;
        QCheckBox *IO_3;
        ... 
        ...
        QCheckBox *IO_46;
        QCheckBox *IO_47;
        QCheckBox *IO_48;
    

    To check them by code I use a simple loop and select the checkboxes by searching for the object pointer by object name.

            for (int i = 0; i < 48; i++) {
                QString cbName = "IO_";
                cbName.append(QString::number(i + 1));
                QCheckBox* cb = ui->SITIPEMaster->findChild<QCheckBox*>(cbName);
    
                cb->setChecked(sitipe_master.ptm.id[id].io[i].value);
            }
    

    instead of setting each cb separately...

            ui->IO_1->setChecked(sitipe_master.ptm.id[id].io[0].value);
            ui->IO_2->setChecked(sitipe_master.ptm.id[id].io[1].value);
            ui->IO_3->setChecked(sitipe_master.ptm.id[id].io[2].value);
            ui->IO_4->setChecked(sitipe_master.ptm.id[id].io[3].value);
            ui->IO_5->setChecked(sitipe_master.ptm.id[id].io[4].value);
            ...
            ...
    

    that works fine....

    now I want to detect a a cklick event on one of these checkboxes in a easy way.
    I don´t want to check them alle in a own function/event...

        void on_IO_1_clicked();
        void on_IO_2_clicked();
        void on_IO_3_clicked();
        void on_IO_4_clicked();
        void on_IO_5_clicked();
        ...
        ...
    

    I tryed it with :

    protected:
        void mousePressEvent(QMouseEvent* event);
    
    --------------
    
    void MainWindow::mousePressEvent(QMouseEvent* event) {
        QWidget* const widget = childAt(event->pos());
        qDebug() << "child widget" << widget;
    }
    

    I got the following error:

    "childAt(event->pos());"
    ebent, type of pointer not alowed...

    What is the correct way to detect mouse event on objects?

    M Offline
    M Offline
    medyakovvit
    wrote on 1 May 2024, 16:51 last edited by
    #2

    @Pfanne

    for (int i = 0; i < 48; i++) 
    {
        QString cbName = "IO_";
        cbName.append(QString::number(i + 1));
         QCheckBox* cb = ui->SITIPEMaster->findChild<QCheckBox*>(cbName);
    
        cb->setChecked(sitipe_master.ptm.id[id].io[i].value);
        // you can use toggled() or clicked()
        connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) {
            // here you have 'i' 
        });
    }
    
    P 1 Reply Last reply 1 May 2024, 19:38
    2
    • P Pfanne
      1 May 2024, 16:22

      [WIN10] [MVS2019] [QtV6.3.1]

      Hi,

      in my code I got a lot of checkboxes.

          QCheckBox *IO_1;
          QCheckBox *IO_2;
          QCheckBox *IO_3;
          ... 
          ...
          QCheckBox *IO_46;
          QCheckBox *IO_47;
          QCheckBox *IO_48;
      

      To check them by code I use a simple loop and select the checkboxes by searching for the object pointer by object name.

              for (int i = 0; i < 48; i++) {
                  QString cbName = "IO_";
                  cbName.append(QString::number(i + 1));
                  QCheckBox* cb = ui->SITIPEMaster->findChild<QCheckBox*>(cbName);
      
                  cb->setChecked(sitipe_master.ptm.id[id].io[i].value);
              }
      

      instead of setting each cb separately...

              ui->IO_1->setChecked(sitipe_master.ptm.id[id].io[0].value);
              ui->IO_2->setChecked(sitipe_master.ptm.id[id].io[1].value);
              ui->IO_3->setChecked(sitipe_master.ptm.id[id].io[2].value);
              ui->IO_4->setChecked(sitipe_master.ptm.id[id].io[3].value);
              ui->IO_5->setChecked(sitipe_master.ptm.id[id].io[4].value);
              ...
              ...
      

      that works fine....

      now I want to detect a a cklick event on one of these checkboxes in a easy way.
      I don´t want to check them alle in a own function/event...

          void on_IO_1_clicked();
          void on_IO_2_clicked();
          void on_IO_3_clicked();
          void on_IO_4_clicked();
          void on_IO_5_clicked();
          ...
          ...
      

      I tryed it with :

      protected:
          void mousePressEvent(QMouseEvent* event);
      
      --------------
      
      void MainWindow::mousePressEvent(QMouseEvent* event) {
          QWidget* const widget = childAt(event->pos());
          qDebug() << "child widget" << widget;
      }
      

      I got the following error:

      "childAt(event->pos());"
      ebent, type of pointer not alowed...

      What is the correct way to detect mouse event on objects?

      M Offline
      M Offline
      mpergand
      wrote on 1 May 2024, 17:13 last edited by
      #3

      @Pfanne
      You may have a look at QButtonGroup or QGroupBox

      P 1 Reply Last reply 1 May 2024, 20:26
      4
      • M medyakovvit
        1 May 2024, 16:51

        @Pfanne

        for (int i = 0; i < 48; i++) 
        {
            QString cbName = "IO_";
            cbName.append(QString::number(i + 1));
             QCheckBox* cb = ui->SITIPEMaster->findChild<QCheckBox*>(cbName);
        
            cb->setChecked(sitipe_master.ptm.id[id].io[i].value);
            // you can use toggled() or clicked()
            connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) {
                // here you have 'i' 
            });
        }
        
        P Offline
        P Offline
        Pfanne
        wrote on 1 May 2024, 19:38 last edited by
        #4

        @medyakovvit

         // you can use toggled() or clicked()
            connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) {
                // here you have 'i' 
        

        what exactly happend here?
        you connect the checkbox toggled/clicked event to ???
        Where can I catch this event for further use?

        M J 2 Replies Last reply 1 May 2024, 19:51
        0
        • P Pfanne
          1 May 2024, 19:38

          @medyakovvit

           // you can use toggled() or clicked()
              connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) {
                  // here you have 'i' 
          

          what exactly happend here?
          you connect the checkbox toggled/clicked event to ???
          Where can I catch this event for further use?

          M Offline
          M Offline
          mpergand
          wrote on 1 May 2024, 19:51 last edited by
          #5

          @Pfanne said in ui detect mouse event on objects:

          what exactly happend here?

          It is a lambda expression, see HERE

          1 Reply Last reply
          0
          • P Pfanne
            1 May 2024, 19:38

            @medyakovvit

             // you can use toggled() or clicked()
                connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) {
                    // here you have 'i' 
            

            what exactly happend here?
            you connect the checkbox toggled/clicked event to ???
            Where can I catch this event for further use?

            J Offline
            J Offline
            JonB
            wrote on 1 May 2024, 19:53 last edited by
            #6

            @Pfanne
            It's a C++ lambda, like an "anonymous function". Search for lambda on https://wiki.qt.io/New_Signal_Slot_Syntax. @mpergand uses it here to pass the i value from the for loop for you to use in the lambda code, which identifies which checkbox has been toggled.

            1 Reply Last reply
            0
            • M mpergand
              1 May 2024, 17:13

              @Pfanne
              You may have a look at QButtonGroup or QGroupBox

              P Offline
              P Offline
              Pfanne
              wrote on 1 May 2024, 20:26 last edited by
              #7

              @mpergand

              I take a look at QButtonGroup, this look like the right object for my usecase.
              I tryed this:

              *.h

              private slots:
                  void on_ioGroup_clicked(int id);
              
              MainWindow::MainWindow(QWidget* parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
              
              {
                  ui->setupUi(this);
                  QButtonGroup* ioGroup = new QButtonGroup(this);
                  ioGroup->addButton(ui->IO_1, 1;
                  ioGroup->addButton(ui->IO_2, 2);
                  
                  connect(ioGroup, SIGNAL(buttonClicked(int)), this, SLOT(on_ioGroup_clicked(int)));
              }
              
              ----
              
              void MainWindow::on_ioGroup_clicked(int id) {
                  qDebug() << "id clicked" << id;
              }
                  ```
              
              but "on_ioGroup-clicked" will not be executed by clicking on  IO_1 or IO_2.
              J 1 Reply Last reply 1 May 2024, 20:33
              0
              • P Pfanne
                1 May 2024, 20:26

                @mpergand

                I take a look at QButtonGroup, this look like the right object for my usecase.
                I tryed this:

                *.h

                private slots:
                    void on_ioGroup_clicked(int id);
                
                MainWindow::MainWindow(QWidget* parent) :
                    QMainWindow(parent),
                    ui(new Ui::MainWindow)
                
                {
                    ui->setupUi(this);
                    QButtonGroup* ioGroup = new QButtonGroup(this);
                    ioGroup->addButton(ui->IO_1, 1;
                    ioGroup->addButton(ui->IO_2, 2);
                    
                    connect(ioGroup, SIGNAL(buttonClicked(int)), this, SLOT(on_ioGroup_clicked(int)));
                }
                
                ----
                
                void MainWindow::on_ioGroup_clicked(int id) {
                    qDebug() << "id clicked" << id;
                }
                    ```
                
                but "on_ioGroup-clicked" will not be executed by clicking on  IO_1 or IO_2.
                J Offline
                J Offline
                JonB
                wrote on 1 May 2024, 20:33 last edited by
                #8

                @Pfanne
                Use the "modern" syntax for yourconnect()s and you would see there is no buttonClicked(int) with int parameter signal. OTOH there is a QButtonGroup::idClicked(int id) signal.

                P 1 Reply Last reply 1 May 2024, 20:42
                1
                • J JonB
                  1 May 2024, 20:33

                  @Pfanne
                  Use the "modern" syntax for yourconnect()s and you would see there is no buttonClicked(int) with int parameter signal. OTOH there is a QButtonGroup::idClicked(int id) signal.

                  P Offline
                  P Offline
                  Pfanne
                  wrote on 1 May 2024, 20:42 last edited by
                  #9

                  @JonB

                  yes, I also saw that "buttonClicked(int)" is not up to date!

                  this worked:

                  connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                  

                  this not:

                      connect(ioGroup, &QButtonGroup::idClicked(int id), this, MainWindow::on_ioGroup_clicked(int id));
                  
                  P J M 3 Replies Last reply 1 May 2024, 21:01
                  0
                  • P Pfanne
                    1 May 2024, 20:42

                    @JonB

                    yes, I also saw that "buttonClicked(int)" is not up to date!

                    this worked:

                    connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                    

                    this not:

                        connect(ioGroup, &QButtonGroup::idClicked(int id), this, MainWindow::on_ioGroup_clicked(int id));
                    
                    P Offline
                    P Offline
                    Pfanne
                    wrote on 1 May 2024, 21:01 last edited by
                    #10

                    @Pfanne

                    finaly this worked:

                        connect(ioGroup, SIGNAL(idClicked(int)), this, SLOT(on_ioGroup_clicked(int)));
                    
                    
                    void MainWindow::on_ioGroup_clicked(int id) {
                        qDebug() << "id clicked" << id;
                        QAbstractButton* cb = ioGroup->button(id);
                        qDebug() << "Object" << cb->objectName();
                    }
                    
                    1 Reply Last reply
                    0
                    • P Pfanne
                      1 May 2024, 20:42

                      @JonB

                      yes, I also saw that "buttonClicked(int)" is not up to date!

                      this worked:

                      connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                      

                      this not:

                          connect(ioGroup, &QButtonGroup::idClicked(int id), this, MainWindow::on_ioGroup_clicked(int id));
                      
                      J Offline
                      J Offline
                      JonB
                      wrote on 1 May 2024, 21:07 last edited by JonB 5 Jan 2024, 21:07
                      #11

                      @Pfanne said in ui detect mouse event on objects:

                      this worked:
                      connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);

                      Correct.

                      finaly this worked:
                      connect(ioGroup, SIGNAL(idClicked(int)), this, SLOT(on_ioGroup_clicked(int)));

                      Since you had it correct first why change it?

                      P 1 Reply Last reply 2 May 2024, 20:29
                      0
                      • P Pfanne
                        1 May 2024, 20:42

                        @JonB

                        yes, I also saw that "buttonClicked(int)" is not up to date!

                        this worked:

                        connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                        

                        this not:

                            connect(ioGroup, &QButtonGroup::idClicked(int id), this, MainWindow::on_ioGroup_clicked(int id));
                        
                        M Offline
                        M Offline
                        mpergand
                        wrote on 1 May 2024, 21:50 last edited by
                        #12

                        @Pfanne said in ui detect mouse event on objects:

                        connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);

                        You must specify an adress (&) here:
                        &MainWindow::on_ioGroup_clicked);

                        J 1 Reply Last reply 1 May 2024, 22:00
                        3
                        • M mpergand
                          1 May 2024, 21:50

                          @Pfanne said in ui detect mouse event on objects:

                          connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);

                          You must specify an adress (&) here:
                          &MainWindow::on_ioGroup_clicked);

                          J Offline
                          J Offline
                          JonB
                          wrote on 1 May 2024, 22:00 last edited by
                          #13

                          @mpergand said in ui detect mouse event on objects:

                          &MainWindow::on_ioGroup_clicked);

                          OIC I missed that when OP said it was correct.

                          M J 2 Replies Last reply 1 May 2024, 22:56
                          0
                          • J JonB
                            1 May 2024, 22:00

                            @mpergand said in ui detect mouse event on objects:

                            &MainWindow::on_ioGroup_clicked);

                            OIC I missed that when OP said it was correct.

                            M Offline
                            M Offline
                            mpergand
                            wrote on 1 May 2024, 22:56 last edited by mpergand 5 Jan 2024, 22:57
                            #14

                            Hi @JonB

                            Off topic question :
                            How to set text color as you do in red in your posts ?

                            P J 2 Replies Last reply 2 May 2024, 12:05
                            0
                            • M mpergand
                              1 May 2024, 22:56

                              Hi @JonB

                              Off topic question :
                              How to set text color as you do in red in your posts ?

                              P Online
                              P Online
                              Pl45m4
                              wrote on 2 May 2024, 12:05 last edited by
                              #15

                              @mpergand said in ui detect mouse event on objects:

                              How to set text color as you do in red in your posts ?

                              ` Text ` = Text


                              If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                              ~E. W. Dijkstra

                              M 1 Reply Last reply 2 May 2024, 19:07
                              0
                              • M mpergand
                                1 May 2024, 22:56

                                Hi @JonB

                                Off topic question :
                                How to set text color as you do in red in your posts ?

                                J Offline
                                J Offline
                                JonB
                                wrote on 2 May 2024, 15:00 last edited by
                                #16

                                @mpergand said in ui detect mouse event on objects:

                                How to set text color as you do in red in your posts ?

                                Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for Text is the first time I have seen any color.

                                Oh, hang on! Like buttonClicked()? LMAO, until today's forum update that was in green, no wonder I didn't know about red! The "color" is just up to the forum style. The important thing is that code is in monospace font. Use the Code icon (</>) when you are typing in. Or

                                `in-line codecharacters`
                                

                                ```

                                multiline code
                                multiline code
                                

                                ```
                                First one is single-backtick inline, second one is triple-backtick above and below block.

                                P 1 Reply Last reply 2 May 2024, 15:42
                                0
                                • J JonB referenced this topic on 2 May 2024, 15:17
                                • J JonB
                                  2 May 2024, 15:00

                                  @mpergand said in ui detect mouse event on objects:

                                  How to set text color as you do in red in your posts ?

                                  Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for Text is the first time I have seen any color.

                                  Oh, hang on! Like buttonClicked()? LMAO, until today's forum update that was in green, no wonder I didn't know about red! The "color" is just up to the forum style. The important thing is that code is in monospace font. Use the Code icon (</>) when you are typing in. Or

                                  `in-line codecharacters`
                                  

                                  ```

                                  multiline code
                                  multiline code
                                  

                                  ```
                                  First one is single-backtick inline, second one is triple-backtick above and below block.

                                  P Online
                                  P Online
                                  Pl45m4
                                  wrote on 2 May 2024, 15:42 last edited by Pl45m4 5 Feb 2024, 15:43
                                  #17

                                  @JonB said in ui detect mouse event on objects:

                                  Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for Text is the first time I have seen any color.

                                  I use this text format every time I mention some Qt term or class. QPushButton, QObject, Q_OBJECT.
                                  So did/do you ;-)
                                  I don't know what exactly you did when writing these posts, but I used single backticks (don't know how they are called)
                                  ` QPushButton ` (now escaped to make them visible)

                                  LMAO, until today's forum update that was in green, no wonder I didn't know about red

                                  I could swear it was red before, with some kind of red-ish background.
                                  At least when used outside of a code section in regular paragraphs.


                                  If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                                  ~E. W. Dijkstra

                                  J 1 Reply Last reply 2 May 2024, 16:30
                                  0
                                  • P Pl45m4
                                    2 May 2024, 15:42

                                    @JonB said in ui detect mouse event on objects:

                                    Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for Text is the first time I have seen any color.

                                    I use this text format every time I mention some Qt term or class. QPushButton, QObject, Q_OBJECT.
                                    So did/do you ;-)
                                    I don't know what exactly you did when writing these posts, but I used single backticks (don't know how they are called)
                                    ` QPushButton ` (now escaped to make them visible)

                                    LMAO, until today's forum update that was in green, no wonder I didn't know about red

                                    I could swear it was red before, with some kind of red-ish background.
                                    At least when used outside of a code section in regular paragraphs.

                                    J Offline
                                    J Offline
                                    JonB
                                    wrote on 2 May 2024, 16:30 last edited by
                                    #18

                                    @Pl45m4 Maybe. Whatever I thought the original question was how to write in red, rather than in monospace which happens to show as red!

                                    1 Reply Last reply
                                    1
                                    • P Pl45m4
                                      2 May 2024, 12:05

                                      @mpergand said in ui detect mouse event on objects:

                                      How to set text color as you do in red in your posts ?

                                      ` Text ` = Text

                                      M Offline
                                      M Offline
                                      mpergand
                                      wrote on 2 May 2024, 19:07 last edited by mpergand 5 Feb 2024, 19:10
                                      #19

                                      @Pl45m4
                                      Thanks for the tip :)

                                      I finally found the Help button I was looking for yesterday that describes the markdown syntax.

                                      1 Reply Last reply
                                      0
                                      • J JonB
                                        1 May 2024, 21:07

                                        @Pfanne said in ui detect mouse event on objects:

                                        this worked:
                                        connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);

                                        Correct.

                                        finaly this worked:
                                        connect(ioGroup, SIGNAL(idClicked(int)), this, SLOT(on_ioGroup_clicked(int)));

                                        Since you had it correct first why change it?

                                        P Offline
                                        P Offline
                                        Pfanne
                                        wrote on 2 May 2024, 20:29 last edited by Pfanne 5 Feb 2024, 20:29
                                        #20

                                        @JonB
                                        the first version:

                                        connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                                        

                                        is without the object ID, implementing the ID in this version a error occurse.

                                        M 1 Reply Last reply 2 May 2024, 21:59
                                        0
                                        • P Pfanne
                                          2 May 2024, 20:29

                                          @JonB
                                          the first version:

                                          connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
                                          

                                          is without the object ID, implementing the ID in this version a error occurse.

                                          M Offline
                                          M Offline
                                          mpergand
                                          wrote on 2 May 2024, 21:59 last edited by
                                          #21

                                          @Pfanne said in ui detect mouse event on objects:

                                          connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);

                                          As I said earlier, you have to pass an address:

                                          connect(ioGroup, &QButtonGroup::idClicked, this, &MainWindow::on_ioGroup_clicked);

                                          1 Reply Last reply
                                          2

                                          11/26

                                          1 May 2024, 21:07

                                          • Login

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