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. Pushbutton crashed.
Forum Updated to NodeBB v4.3 + New Features

Pushbutton crashed.

Scheduled Pinned Locked Moved Solved General and Desktop
c++ qt
26 Posts 5 Posters 4.0k 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.
  • G Gutks

    @Pl45m4

    NameProjet= Test;
    classe1= customPushButton.h ; customPushButton;
    Classe2= test.h ; test.cpp = ( Widget, ui->classe)
    other= main.cpp;

    I tried to use this logic similar to the previous tutorial, however, Macro ( Q_Q() ),
    it is not stated, when I try to instantiate q->emitPressed(). return error: use of undeclared identifier 'q_func';

    I tried to change the 'Q' for 'D' ( Q_D), equal to the situation below, returns another.
    error: cannot initialize a variable of type 'QAbstractButtonPrivate *const' with an rvalue of type 'QPushButtonPrivate'
    Q_D(Class)

    void QAbstractButton::mousePressEvent(QMouseEvent *e){
        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();
        }
    }
    

    Ok, I'm going to make the right sign and study the custom widgets with Qt Designer. Thank you for the patience, using google translation . I return with possible results or errors.

    JonBJ Online
    JonBJ Online
    JonB
    wrote on last edited by JonB
    #8

    @Gutks
    Especially if you are a beginner, why are you trying to use macros like Q_D() and Q_Q() at all? So far as I know they are for internal Qt code. I have never used them in any user code I have written, why do you think you need them?

    G 1 Reply Last reply
    3
    • JonBJ JonB

      @Gutks
      Especially if you are a beginner, why are you trying to use macros like Q_D() and Q_Q() at all? So far as I know they are for internal Qt code. I have never used them in any user code I have written, why do you think you need them?

      G Offline
      G Offline
      Gutks
      wrote on last edited by Gutks
      #9

      @JonB In order to instantiate: emitPressed(); emitRelease(); equal example
      of the QAbstractButton class.

      Pablo J. RoginaP JonBJ 2 Replies Last reply
      0
      • G Gutks

        @JonB In order to instantiate: emitPressed(); emitRelease(); equal example
        of the QAbstractButton class.

        Pablo J. RoginaP Offline
        Pablo J. RoginaP Offline
        Pablo J. Rogina
        wrote on last edited by
        #10

        @Gutks said in Pushbutton crashed.:

        instantiate: emitPressed(); emitRelease();

        Mmm, strange that you need to "instantiate" what seems to be signals...

        Upvote the answer(s) that helped you solve the issue
        Use "Topic Tools" button to mark your post as Solved
        Add screenshots via postimage.org
        Don't ask support requests via chat/PM. Please use the forum so others can benefit from the solution in the future

        1 Reply Last reply
        2
        • G Gutks

          @JonB In order to instantiate: emitPressed(); emitRelease(); equal example
          of the QAbstractButton class.

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

          @Gutks
          Yes, but why are you doing so, given that emitPressed() is not documented and private to the innards of QAbstractButton? Which is why you are running into the compilation errors.... My question is: why are trying to do anything like this? The fact that it's in QAbstractButtonPrivate should give you a clue.

          G 1 Reply Last reply
          1
          • JonBJ JonB

            @Gutks
            Yes, but why are you doing so, given that emitPressed() is not documented and private to the innards of QAbstractButton? Which is why you are running into the compilation errors.... My question is: why are trying to do anything like this? The fact that it's in QAbstractButtonPrivate should give you a clue.

            G Offline
            G Offline
            Gutks
            wrote on last edited by
            #12

            @JonB

            The implementation of this function is accessing Q_D, since I am re-implementing it, I thought I could do the same.

            void QAbstractButton::mousePressEvent(QMouseEvent *e)
            

            I will study the qt designer, to try to solve, otherwise, I will create an Auxiliary button to remove in the edit line. I think it's simpler than using events

            JonBJ 1 Reply Last reply
            0
            • G Gutks

              @JonB

              The implementation of this function is accessing Q_D, since I am re-implementing it, I thought I could do the same.

              void QAbstractButton::mousePressEvent(QMouseEvent *e)
              

              I will study the qt designer, to try to solve, otherwise, I will create an Auxiliary button to remove in the edit line. I think it's simpler than using events

              JonBJ Online
              JonBJ Online
              JonB
              wrote on last edited by
              #13

              @Gutks
              But why are you "re-implementing" it at all? Usually a user class sub-classes, not re-implements. Re-implementing is fraught, e.g. what happens if the internals change over time. Since you say "I'm a beginner" I cannot see why you would want to do such a thing, when 99.9% of other users do not.

              I keep saying the same thing, so I'll leave it to you now.

              G 1 Reply Last reply
              2
              • JonBJ JonB

                @Gutks
                But why are you "re-implementing" it at all? Usually a user class sub-classes, not re-implements. Re-implementing is fraught, e.g. what happens if the internals change over time. Since you say "I'm a beginner" I cannot see why you would want to do such a thing, when 99.9% of other users do not.

                I keep saying the same thing, so I'll leave it to you now.

                G Offline
                G Offline
                Gutks
                wrote on last edited by
                #14

                @JonB
                Okay, thanks for trying to help. I will search for a solution to my problem.

                Pl45m4P JonBJ Pablo J. RoginaP 5 Replies Last reply
                0
                • G Gutks

                  @JonB
                  Okay, thanks for trying to help. I will search for a solution to my problem.

                  Pl45m4P Online
                  Pl45m4P Online
                  Pl45m4
                  wrote on last edited by
                  #15

                  @Gutks

                  I already gave you an almost step by step manual how to solve your problem... You dont need Q_Q or reimplement any signals.


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

                  ~E. W. Dijkstra

                  1 Reply Last reply
                  2
                  • G Gutks

                    @JonB
                    Okay, thanks for trying to help. I will search for a solution to my problem.

                    JonBJ Online
                    JonBJ Online
                    JonB
                    wrote on last edited by
                    #16

                    @Gutks
                    Both @Pl45m4 & I are trying to say you don't need to go down the route you are on....

                    1 Reply Last reply
                    1
                    • G Gutks

                      @JonB
                      Okay, thanks for trying to help. I will search for a solution to my problem.

                      Pablo J. RoginaP Offline
                      Pablo J. RoginaP Offline
                      Pablo J. Rogina
                      wrote on last edited by
                      #17

                      @Gutks said in Pushbutton crashed.:

                      if(p->button()==Qt::LeftButton){ui->lineEdit1->setText(QString::number(value1++));}
                      
                      else{if(p->button()==Qt::RightButton){ui->lineEdit1->setText(QString::number(value1--));}
                      

                      From your requirements it's apparent you need a custom QPushButton that extends existing one by adding just the rightclicked() signal, and nothing else. So you'll have both signals (existing left click) and new one (right click) to connect as you wish.

                      Please take a look at this SO question & answers.

                      Upvote the answer(s) that helped you solve the issue
                      Use "Topic Tools" button to mark your post as Solved
                      Add screenshots via postimage.org
                      Don't ask support requests via chat/PM. Please use the forum so others can benefit from the solution in the future

                      1 Reply Last reply
                      2
                      • G Gutks

                        @JonB
                        Okay, thanks for trying to help. I will search for a solution to my problem.

                        JonBJ Online
                        JonBJ Online
                        JonB
                        wrote on last edited by JonB
                        #18

                        @Gutks
                        If what @Pablo-J-Rogina has discerned is correct --- you just want a left-/right-click to increment/decrement a number in a QLineEdit, is that right? --- then you would be better just using a QSpinBox, which is for entering numbers, and you wouldn't have any of this.....

                        Pablo J. RoginaP 1 Reply Last reply
                        1
                        • JonBJ JonB

                          @Gutks
                          If what @Pablo-J-Rogina has discerned is correct --- you just want a left-/right-click to increment/decrement a number in a QLineEdit, is that right? --- then you would be better just using a QSpinBox, which is for entering numbers, and you wouldn't have any of this.....

                          Pablo J. RoginaP Offline
                          Pablo J. RoginaP Offline
                          Pablo J. Rogina
                          wrote on last edited by
                          #19

                          @JonB said in Pushbutton crashed.:

                          then you would be better just using a QSpinBox,

                          I think the goal here is the rightclicked() signal, what you connect that to is not relevant at this point

                          Upvote the answer(s) that helped you solve the issue
                          Use "Topic Tools" button to mark your post as Solved
                          Add screenshots via postimage.org
                          Don't ask support requests via chat/PM. Please use the forum so others can benefit from the solution in the future

                          JonBJ 1 Reply Last reply
                          3
                          • Pablo J. RoginaP Pablo J. Rogina

                            @JonB said in Pushbutton crashed.:

                            then you would be better just using a QSpinBox,

                            I think the goal here is the rightclicked() signal, what you connect that to is not relevant at this point

                            JonBJ Online
                            JonBJ Online
                            JonB
                            wrote on last edited by JonB
                            #20

                            @Pablo-J-Rogina
                            Oh, I see. You may be right. Or it just might turn out the user was going to use a left-/-right-click on a button to inc/dec a number, you never know... :)

                            On a different tone, it's "unusual" to have the user right-click on a button. Possible, but possibly not intuitive. A "rocker" pushbutton (click at left/right for different behaviour, but with left mouse) might be another possibility.

                            Pl45m4P 1 Reply Last reply
                            1
                            • G Gutks

                              @JonB
                              Okay, thanks for trying to help. I will search for a solution to my problem.

                              Pl45m4P Online
                              Pl45m4P Online
                              Pl45m4
                              wrote on last edited by Pl45m4
                              #21

                              @Gutks

                              Button.h

                              #ifndef LR_CLICKBUTTON_H
                              #define LR_CLICKBUTTON_H
                              
                              #include <QPushButton>
                              
                              class LR_ClickButton: public QPushButton
                              {
                                  Q_OBJECT
                              public:
                              
                                  LR_ClickButton(QWidget *parent = nullptr);
                              
                              
                              protected:
                                 void	mousePressEvent(QMouseEvent *e) override;
                                 void mouseReleaseEvent(QMouseEvent *e) override;
                              
                              signals:
                                  // Not needed, since one signal which sends MouseEvent to get handled in slot
                                  //void leftClicked();
                                  //void rightClicked();
                              
                                  void myClicked(QMouseEvent *e);
                              };
                              
                              #endif // LR_CLICKBUTTON_H
                              

                              Button.cpp

                              #include "lr_clickbutton.h"
                              #include <QMouseEvent>
                              #include <QDebug>
                              LR_ClickButton::LR_ClickButton(QWidget *parent):
                                  QPushButton(parent)
                              {
                              
                              }
                              
                              void LR_ClickButton::mousePressEvent(QMouseEvent *e)
                              {
                                  QPushButton::mousePressEvent(e);
                              }
                              
                              void LR_ClickButton::mouseReleaseEvent(QMouseEvent *e)
                              {
                                  if(e->button() == Qt::LeftButton)
                                  {
                                      qDebug() << "Left";
                                      emit myClicked(e);
                                  }
                                  else if (e->button() == Qt::RightButton) {
                              
                                      qDebug() << "Right";
                                      emit myClicked(e);
                              
                                  }
                                      QPushButton::mouseReleaseEvent(e);
                              }
                              

                              MainWindow.h

                              public slots:
                                  void myButtonClicked(QMouseEvent *e);
                              

                              MainWindow.cpp

                              // #########  C'TOR  #####################
                                  LR_ClickButton *button1 = new LR_ClickButton(this);
                              
                                  centralWidget()->layout()->addWidget(button1);
                              
                                  connect(button1, &LR_ClickButton::myClicked, this, &MainWindow::myButtonClicked);
                              
                              // ######################################
                              
                              
                              void MainWindow::myButtonClicked(QMouseEvent *e)
                              {
                                  if(e->button() == Qt::LeftButton)
                                  {
                                      // Of course you can put anything you want here
                                      int val = ui->spinBox->value();
                                      ui->spinBox->setValue(val + 1);
                                  }
                                  else if (e->button() == Qt::RightButton) {
                              
                                      // or here
                                      int val = ui->spinBox->value();
                                      ui->spinBox->setValue(val - 1);
                                  }
                              }
                              
                              
                              

                              Wasn't that hard, right? :)

                              Result:

                              3 left-clicks increase value by 3.
                              Bildschirmfoto vom 2020-08-19 15-13-02.png

                              2 right-clicks decrease value by 2 again.
                              Bildschirmfoto vom 2020-08-19 15-13-33.png


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

                              ~E. W. Dijkstra

                              1 Reply Last reply
                              1
                              • JonBJ JonB

                                @Pablo-J-Rogina
                                Oh, I see. You may be right. Or it just might turn out the user was going to use a left-/-right-click on a button to inc/dec a number, you never know... :)

                                On a different tone, it's "unusual" to have the user right-click on a button. Possible, but possibly not intuitive. A "rocker" pushbutton (click at left/right for different behaviour, but with left mouse) might be another possibility.

                                Pl45m4P Online
                                Pl45m4P Online
                                Pl45m4
                                wrote on last edited by
                                #22

                                @JonB said in Pushbutton crashed.:

                                On a different tone, it's "unusual" to have the user right-click on a button. Possible, but possibly not intuitive

                                Might not be the most intuitive solution but this is actually used a lot in games (with a hint to this behavior ofc)


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

                                ~E. W. Dijkstra

                                JonBJ 1 Reply Last reply
                                1
                                • Pl45m4P Pl45m4

                                  @JonB said in Pushbutton crashed.:

                                  On a different tone, it's "unusual" to have the user right-click on a button. Possible, but possibly not intuitive

                                  Might not be the most intuitive solution but this is actually used a lot in games (with a hint to this behavior ofc)

                                  JonBJ Online
                                  JonBJ Online
                                  JonB
                                  wrote on last edited by
                                  #23

                                  @Pl45m4
                                  Point taken! Not in any of the games I play that I can think of, though most of mine are 2D turn-based from the last millennium... ;-)

                                  1 Reply Last reply
                                  2
                                  • G Offline
                                    G Offline
                                    Gutks
                                    wrote on last edited by Gutks
                                    #24

                                    @Christian-Ehrlicher @Pl45m4 @JonB @Pablo-J-Rogina

                                    Thank you very much, you don't know how it helped me. Otherwise, I would have to create an internal storage system for each button between the tabs and remove it when editing the line.

                                    Yes, and a tool I am creating to help the 1 game community. How does it activate as resolved?
                                    Captura de tela de 2020-08-19 08-05-11.png

                                    JonBJ 1 Reply Last reply
                                    1
                                    • G Gutks

                                      @Christian-Ehrlicher @Pl45m4 @JonB @Pablo-J-Rogina

                                      Thank you very much, you don't know how it helped me. Otherwise, I would have to create an internal storage system for each button between the tabs and remove it when editing the line.

                                      Yes, and a tool I am creating to help the 1 game community. How does it activate as resolved?
                                      Captura de tela de 2020-08-19 08-05-11.png

                                      JonBJ Online
                                      JonBJ Online
                                      JonB
                                      wrote on last edited by
                                      #25

                                      @Gutks said in Pushbutton crashed.:

                                      How does it activate as resolved

                                      Either at bottom of page Topic Tools button, or if you feel a particular post answered it the vertical ... button at the right on that post.

                                      Pl45m4P 1 Reply Last reply
                                      2
                                      • JonBJ JonB

                                        @Gutks said in Pushbutton crashed.:

                                        How does it activate as resolved

                                        Either at bottom of page Topic Tools button, or if you feel a particular post answered it the vertical ... button at the right on that post.

                                        Pl45m4P Online
                                        Pl45m4P Online
                                        Pl45m4
                                        wrote on last edited by
                                        #26

                                        @JonB

                                        This is exactly what I was expecting and what I thought of.... These type of games, where you have ingame shops and a lot of inventories... If you left-click an item, you probably buy it from shop or use it, if you right-click, you drop it or sell it :)


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

                                        ~E. W. Dijkstra

                                        1 Reply Last reply
                                        1

                                        • Login

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