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?
QtWS25 Last Chance

Check if button was right clicked or left clicked?

Scheduled Pinned Locked Moved Solved General and Desktop
right-clickbuttonqmouseevent
15 Posts 4 Posters 7.1k Views
  • 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.
  • M Offline
    M Offline
    mrjj
    Lifetime Qt Champion
    wrote on 21 Apr 2019, 08:55 last edited by
    #5

    Hi
    For your use case, you could add new signal to
    your derived QPushButton to allow it to emit
    rightclicked() and connect to that new signal outside
    to handle when its right-clicked.

    Note: its pretty uncommon to right click buttons in terms
    of user experience.

    1 Reply Last reply
    4
    • 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 Online
        C Online
        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 Online
                    C Online
                    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

                        14/15

                        21 Apr 2019, 12:02

                        • Login

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