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. Check if button was right clicked or left clicked?
Forum Updated to NodeBB v4.3 + New Features

Check if button was right clicked or left clicked?

Scheduled Pinned Locked Moved Solved General and Desktop
right-clickbuttonqmouseevent
15 Posts 4 Posters 7.6k 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.
  • L Offline
    L Offline
    legitnameyo
    wrote on 21 Apr 2019, 08:55 last edited by
    #6

    When I try to add the QPushButton mouseEventPress() function into my code and redefine it it gives this error

    member access into incomplete type 'QAbstractButtonPrivate'
    
    1 Reply Last reply
    0
    • C Offline
      C Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on 21 Apr 2019, 09:03 last edited by
      #7

      You should not add the code from QAbstractButton::mousePressEvent() - you should override the function. This is basic c++ knowledge explained e.g. here: https://www.programiz.com/cpp-programming/function-overriding

      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
      3
      • L Offline
        L Offline
        legitnameyo
        wrote on 21 Apr 2019, 09:22 last edited by
        #8

        All I get when I try to override the function is

        non-friend class member 'mouseEventPress' cannot have a qualified name
        
        M 1 Reply Last reply 21 Apr 2019, 09:25
        0
        • L legitnameyo
          21 Apr 2019, 09:22

          All I get when I try to override the function is

          non-friend class member 'mouseEventPress' cannot have a qualified name
          
          M Offline
          M Offline
          mrjj
          Lifetime Qt Champion
          wrote on 21 Apr 2019, 09:25 last edited by
          #9

          @legitnameyo
          show the code :)

          1 Reply Last reply
          0
          • L Offline
            L Offline
            legitnameyo
            wrote on 21 Apr 2019, 09:34 last edited by
            #10
            class Derived: public QPushButton {
            public:
                QPushButton A;
                QAbstractButton B(Derived);
                QAbstractButton::mouseMoveEvent(QMouseEvent *e); // Error
            
                void QAbstractButton::mousePressEvent(QMouseEvent *e) // Error
                {
                    Q_D(QAbstractButton);
                    if (e->button() != Qt::LeftButton) {
                        e->ignore();
                        return;
                    }
                    if (hitButton(e->pos())) {
                        setDown(true);
                        d->pressed = true;
                        repaint();
                        d->emitPressed();
                        e->accept();
                    } else {
                        e->ignore();
                    }
                }
            };
            
            
            K 1 Reply Last reply 21 Apr 2019, 09:51
            0
            • L legitnameyo
              21 Apr 2019, 09:34
              class Derived: public QPushButton {
              public:
                  QPushButton A;
                  QAbstractButton B(Derived);
                  QAbstractButton::mouseMoveEvent(QMouseEvent *e); // Error
              
                  void QAbstractButton::mousePressEvent(QMouseEvent *e) // Error
                  {
                      Q_D(QAbstractButton);
                      if (e->button() != Qt::LeftButton) {
                          e->ignore();
                          return;
                      }
                      if (hitButton(e->pos())) {
                          setDown(true);
                          d->pressed = true;
                          repaint();
                          d->emitPressed();
                          e->accept();
                      } else {
                          e->ignore();
                      }
                  }
              };
              
              
              K Offline
              K Offline
              KillerSmath
              wrote on 21 Apr 2019, 09:51 last edited by KillerSmath
              #11

              @legitnameyo
              You cannot define a qualifier in declaration of a member method.

              class Derived : public QPushButton{
              public:
                //void QPushButton::mousePressEvent(QMouseEvent *e); // wrong
                void mousePressEvent(QMouseEvent *e); // right
              };
              

              Further, you should to define the construtor method of your class.
              Note: The construtor method is a function without return value and with same name of class.

              class Derived : public QPushButton{
              public:
                 Derived(); // construtor
              }
              

              To accept signals and slot feature, you need to declare the Q_OBJECT inside your class.

              class Derived : QPushButton{
                 Q_OBJECT
              ...
              };
              

              Below is an example code of how you should reimplement it using @mrjj idea.

              class CustomPushButton : public QPushButton
              {
                  Q_OBJECT
              public:
                  CustomPushButton(QWidget *parent = nullptr);
              
              protected:
                 void	mousePressEvent(QMouseEvent *e) override;
                 void mouseReleaseEvent(QMouseEvent *e) override;
              
              signals:
                  void leftClicked();
                  void rightClicked();
              };
              

              Now, you need to reimplement the mousePressedEvent and mouseReleaseEvent(if necessary) logic on your .cpp file

              @Computer Science Student - Brazil
              Web Developer and Researcher
              “Sometimes it’s the people no one imagines anything of who do the things that no one can imagine.” - Alan Turing

              1 Reply Last reply
              5
              • L Offline
                L Offline
                legitnameyo
                wrote on 21 Apr 2019, 11:52 last edited by
                #12

                all I get from that class is

                :-1: error: symbol(s) not found for architecture x86_64
                :-1: error: linker command failed with exit code 1 (use -v to see invocation)
                
                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on 21 Apr 2019, 11:54 last edited by
                  #13

                  @legitnameyo said in Check if button was right clicked or left clicked?:

                  all I get from that class is

                  This is no class, this is a class definition. You have to fill out the functions by yourself with the code you want to have - we won't write you your code...

                  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
                  • L Offline
                    L Offline
                    legitnameyo
                    wrote on 21 Apr 2019, 12:02 last edited by
                    #14

                    I can't write out the functions since everything I want to override or change in QPushButton::mousePressEvent is private.

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      legitnameyo
                      wrote on 21 Apr 2019, 12:11 last edited by
                      #15

                      Solved it by creating a derivative of the CustomQPushButton class definition! Thanks!

                      1 Reply Last reply
                      0

                      15/15

                      21 Apr 2019, 12:11

                      • Login

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