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. How to prevent the mouse click event from happening when the button is Disabled
Forum Updated to NodeBB v4.3 + New Features

How to prevent the mouse click event from happening when the button is Disabled

Scheduled Pinned Locked Moved Unsolved General and Desktop
42 Posts 6 Posters 13.9k 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.
  • ManiRonM ManiRon

    @jsulm I think the problem here is the timeout that i have given , i think its less

    Pradeep P NP Offline
    Pradeep P NP Offline
    Pradeep P N
    wrote on last edited by Pradeep P N
    #17

    @ManiRon
    I just tried with Timer it works fine.
    The Button is disabled for 3s.

    • Check with your stylesheet.
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->label->setVisible(false);
    
        tmr = new QTimer(this);
        connect(tmr, &QTimer::timeout, [this]{
            ui->pushButton->setEnabled(true);
        });
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        qDebug() << Q_FUNC_INFO << QTime::currentTime().toString();
    
        tmr->start();
        tmr->setInterval(3000);
    
        ui->pushButton->setEnabled(false);
    }
    

    0_1561526880214_Btn.gif

    Pradeep Nimbalkar.
    Upvote the answer(s) that helped you to solve the issue...
    Keep code clean.

    ManiRonM 1 Reply Last reply
    3
    • Pradeep P NP Offline
      Pradeep P NP Offline
      Pradeep P N
      wrote on last edited by Pradeep P N
      #18

      Hi @ManiRon

      Try this with your setStyleSheet()

      ui->pushButton->setStyleSheet("QPushButton {"
                                    "background-color:#44c767;"
                                    "}"
                                    "QPushButton:disabled {"
                                    "background-color:gray;"
                                    "}");
      

      0_1561527474438_Btn.gif
      All the best.

      Pradeep Nimbalkar.
      Upvote the answer(s) that helped you to solve the issue...
      Keep code clean.

      1 Reply Last reply
      4
      • Pradeep P NP Pradeep P N

        @ManiRon
        I just tried with Timer it works fine.
        The Button is disabled for 3s.

        • Check with your stylesheet.
        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
            ui->label->setVisible(false);
        
            tmr = new QTimer(this);
            connect(tmr, &QTimer::timeout, [this]{
                ui->pushButton->setEnabled(true);
            });
        }
        
        void MainWindow::on_pushButton_clicked()
        {
            qDebug() << Q_FUNC_INFO << QTime::currentTime().toString();
        
            tmr->start();
            tmr->setInterval(3000);
        
            ui->pushButton->setEnabled(false);
        }
        

        0_1561526880214_Btn.gif

        ManiRonM Offline
        ManiRonM Offline
        ManiRon
        wrote on last edited by ManiRon
        #19

        @Pradeep-P-N @jsulm @J-Hilk
        when i created a sample i was absorbing one thing , that when i click the button i disabled it , but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed by the click signal which was occuring when i clicked the button when it was disabled

        J.HilkJ 1 Reply Last reply
        0
        • ManiRonM ManiRon

          @Pradeep-P-N @jsulm @J-Hilk
          when i created a sample i was absorbing one thing , that when i click the button i disabled it , but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed by the click signal which was occuring when i clicked the button when it was disabled

          J.HilkJ Online
          J.HilkJ Online
          J.Hilk
          Moderators
          wrote on last edited by
          #20

          @ManiRon said in How to prevent the mouse click event from happening when the button is Disabled:

          but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed

          If true, then that's a bug in the library!


          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          ManiRonM Pradeep P NP J.HilkJ 3 Replies Last reply
          0
          • J.HilkJ J.Hilk

            @ManiRon said in How to prevent the mouse click event from happening when the button is Disabled:

            but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed

            If true, then that's a bug in the library!

            ManiRonM Offline
            ManiRonM Offline
            ManiRon
            wrote on last edited by
            #21

            @J.Hilk how it can be solved ?

            jsulmJ 1 Reply Last reply
            0
            • J.HilkJ J.Hilk

              @ManiRon said in How to prevent the mouse click event from happening when the button is Disabled:

              but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed

              If true, then that's a bug in the library!

              Pradeep P NP Offline
              Pradeep P NP Offline
              Pradeep P N
              wrote on last edited by Pradeep P N
              #22

              @J.Hilk
              i am bit confused with the statement in fact.

              "but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed"

              • i click the button when it is disabled -> Nothing will work as Button is Disabled.
              • after enabling the button the click signal gets emitted -> Yes as after 3s timer the button is enabled and can be clicked.

              Pradeep Nimbalkar.
              Upvote the answer(s) that helped you to solve the issue...
              Keep code clean.

              J.HilkJ 1 Reply Last reply
              0
              • Pradeep P NP Pradeep P N

                @J.Hilk
                i am bit confused with the statement in fact.

                "but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed"

                • i click the button when it is disabled -> Nothing will work as Button is Disabled.
                • after enabling the button the click signal gets emitted -> Yes as after 3s timer the button is enabled and can be clicked.
                J.HilkJ Online
                J.HilkJ Online
                J.Hilk
                Moderators
                wrote on last edited by
                #23

                @Pradeep-P-N

                What I get out of @ManiRon statement is:

                • Button is disabled
                • Button gets pressed/clicked
                  • nothing happens, as expected
                • Button gets set to enabled
                  • clicked signal is emitted without button interaction

                Thats not normal behavior in my opinion

                I'll make a quick test case

                @ManiRon what Qt Version what OS btw?


                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                Q: What's that?
                A: It's blue light.
                Q: What does it do?
                A: It turns blue.

                ManiRonM 1 Reply Last reply
                1
                • Pradeep P NP Offline
                  Pradeep P NP Offline
                  Pradeep P N
                  wrote on last edited by
                  #24

                  Hmmm, Got it @J-Hilk
                  Thanks.

                  @ManiRon Can you share a sample code ?
                  You said you are using the QTimer.
                  Just wanted to check if there is anything mismatch with the code.

                  Pradeep Nimbalkar.
                  Upvote the answer(s) that helped you to solve the issue...
                  Keep code clean.

                  1 Reply Last reply
                  0
                  • J.HilkJ J.Hilk

                    @ManiRon said in How to prevent the mouse click event from happening when the button is Disabled:

                    but while i click the button when it is disabled after enabling the button the click signal gets emitted and the click function is executed

                    If true, then that's a bug in the library!

                    J.HilkJ Online
                    J.HilkJ Online
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #25

                    @J.Hilk said in How to prevent the mouse click event from happening when the button is Disabled:

                    If true, then that's a bug in the library!

                    Nope, not true 5.12.4 MacOS, no unexpected clicked emits

                    int main(int argc, char *argv[])
                    {
                    
                        QApplication a(argc, argv);
                    
                        auto *btn = new QPushButton("Enabled");
                        btn->resize(200, 50);
                        btn->show();
                    
                        QObject::connect(btn, &QPushButton::clicked, [btn]()->void{
                                             btn->setEnabled(false);
                                             btn->setText("Disabled");
                                             qDebug("Btn clicked");
                                         });
                        QObject::connect(btn, &QPushButton::pressed, []()->void{qDebug("Btn Pressed"); });
                        QObject::connect(btn, &QPushButton::released, []()->void{qDebug("Btn Released"); });
                    
                        QTimer t_reset;
                        t_reset.setInterval(3000);
                        QObject::connect(&t_reset, &QTimer::timeout, btn, [btn]()->void{btn->setEnabled(true); btn->setText("Enabled");});
                    
                        QObject::connect(btn, &QPushButton::clicked, &t_reset, QOverload<>::of(&QTimer::start));
                    
                        return  a.exec();
                    }
                    

                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    1 Reply Last reply
                    3
                    • Pradeep P NP Offline
                      Pradeep P NP Offline
                      Pradeep P N
                      wrote on last edited by Pradeep P N
                      #26

                      @J-Hilk
                      Even i tried on 5.12.3 - Ubuntu 16.04 & the above code ( From my post ).
                      Also the one shared by you.
                      It works fine.

                      • No Click called related to button enable/disable status.

                      Pradeep Nimbalkar.
                      Upvote the answer(s) that helped you to solve the issue...
                      Keep code clean.

                      1 Reply Last reply
                      3
                      • ManiRonM ManiRon

                        @J.Hilk how it can be solved ?

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #27

                        @ManiRon Please add

                        qDebug() << ui->pushButton->enabled();
                        

                        to your slot and see what it outputs when you click on the button while it is disabled.
                        And please debug you app more carefully: you say you have a timeout to activate the button again (you should have said that in your first post already)? Did you make sure the button was not yet activated? Is it the same if you disable you style sheet?

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

                        ManiRonM 1 Reply Last reply
                        1
                        • J.HilkJ J.Hilk

                          @Pradeep-P-N

                          What I get out of @ManiRon statement is:

                          • Button is disabled
                          • Button gets pressed/clicked
                            • nothing happens, as expected
                          • Button gets set to enabled
                            • clicked signal is emitted without button interaction

                          Thats not normal behavior in my opinion

                          I'll make a quick test case

                          @ManiRon what Qt Version what OS btw?

                          ManiRonM Offline
                          ManiRonM Offline
                          ManiRon
                          wrote on last edited by ManiRon
                          #28

                          @J.Hilk QT 5.5.0 QT Creator version 3.4.2 OS Windows Vista

                          1 Reply Last reply
                          0
                          • jsulmJ jsulm

                            @ManiRon Please add

                            qDebug() << ui->pushButton->enabled();
                            

                            to your slot and see what it outputs when you click on the button while it is disabled.
                            And please debug you app more carefully: you say you have a timeout to activate the button again (you should have said that in your first post already)? Did you make sure the button was not yet activated? Is it the same if you disable you style sheet?

                            ManiRonM Offline
                            ManiRonM Offline
                            ManiRon
                            wrote on last edited by
                            #29

                            @jsulm Yes i made sure cause i enable the button after 3s only , and this statement is not there , it throws error (qDebug() << ui->pushButton->enabled())

                            Pradeep P NP 1 Reply Last reply
                            0
                            • ManiRonM ManiRon

                              @jsulm Yes i made sure cause i enable the button after 3s only , and this statement is not there , it throws error (qDebug() << ui->pushButton->enabled())

                              Pradeep P NP Offline
                              Pradeep P NP Offline
                              Pradeep P N
                              wrote on last edited by Pradeep P N
                              #30

                              @ManiRon
                              Did you add #include <QDebug>

                              Ad if so -> What is the error ?

                              Pradeep Nimbalkar.
                              Upvote the answer(s) that helped you to solve the issue...
                              Keep code clean.

                              ManiRonM 2 Replies Last reply
                              3
                              • Pradeep P NP Pradeep P N

                                @ManiRon
                                Did you add #include <QDebug>

                                Ad if so -> What is the error ?

                                ManiRonM Offline
                                ManiRonM Offline
                                ManiRon
                                wrote on last edited by
                                #31

                                @Pradeep-P-N yes

                                1 Reply Last reply
                                0
                                • Pradeep P NP Pradeep P N

                                  @ManiRon
                                  Did you add #include <QDebug>

                                  Ad if so -> What is the error ?

                                  ManiRonM Offline
                                  ManiRonM Offline
                                  ManiRon
                                  wrote on last edited by
                                  #32

                                  @Pradeep-P-N

                                  class QPushButton' has no member named 'enabled'
                                  qDebug() << ui->pushbutton->enabled();
                                  ^

                                  Pradeep P NP 1 Reply Last reply
                                  0
                                  • ManiRonM ManiRon

                                    @Pradeep-P-N

                                    class QPushButton' has no member named 'enabled'
                                    qDebug() << ui->pushbutton->enabled();
                                    ^

                                    Pradeep P NP Offline
                                    Pradeep P NP Offline
                                    Pradeep P N
                                    wrote on last edited by Pradeep P N
                                    #33

                                    @ManiRon

                                    Use qDebug() << ui->pushButton->isEnabled();

                                    You cannot do ui->pushButton->enabled()

                                    • Refer enabled.

                                    Access functions:

                                    • bool isEnabled() const
                                    • void setEnabled(bool)

                                    Pradeep Nimbalkar.
                                    Upvote the answer(s) that helped you to solve the issue...
                                    Keep code clean.

                                    ManiRonM 1 Reply Last reply
                                    5
                                    • Pradeep P NP Pradeep P N

                                      @ManiRon

                                      Use qDebug() << ui->pushButton->isEnabled();

                                      You cannot do ui->pushButton->enabled()

                                      • Refer enabled.

                                      Access functions:

                                      • bool isEnabled() const
                                      • void setEnabled(bool)
                                      ManiRonM Offline
                                      ManiRonM Offline
                                      ManiRon
                                      wrote on last edited by
                                      #34

                                      @Pradeep-P-N

                                      After the button gets enabled the signal automatically called based on my previous click

                                      and the print came as

                                      Inside Pushbutton
                                      ui->Pushbutton->isEnabled() 1
                                      Inside Pushbutton
                                      ui->Pushbutton->isEnabled() 1
                                      Inside Pushbutton
                                      ui->Pushbutton->isEnabled() 1

                                      Pradeep P NP 1 Reply Last reply
                                      0
                                      • ManiRonM ManiRon

                                        @Pradeep-P-N

                                        After the button gets enabled the signal automatically called based on my previous click

                                        and the print came as

                                        Inside Pushbutton
                                        ui->Pushbutton->isEnabled() 1
                                        Inside Pushbutton
                                        ui->Pushbutton->isEnabled() 1
                                        Inside Pushbutton
                                        ui->Pushbutton->isEnabled() 1

                                        Pradeep P NP Offline
                                        Pradeep P NP Offline
                                        Pradeep P N
                                        wrote on last edited by Pradeep P N
                                        #35

                                        @ManiRon You dint debug the code after you disabled right ?

                                        • From your log i can clearly see that your PushButton was never disabled.
                                            ui->pushButton->setEnabled(false);
                                        
                                            qDebug() << ui->pushButton->isEnabled();
                                        

                                        Pradeep Nimbalkar.
                                        Upvote the answer(s) that helped you to solve the issue...
                                        Keep code clean.

                                        ManiRonM 1 Reply Last reply
                                        1
                                        • Pradeep P NP Pradeep P N

                                          @ManiRon You dint debug the code after you disabled right ?

                                          • From your log i can clearly see that your PushButton was never disabled.
                                              ui->pushButton->setEnabled(false);
                                          
                                              qDebug() << ui->pushButton->isEnabled();
                                          
                                          ManiRonM Offline
                                          ManiRonM Offline
                                          ManiRon
                                          wrote on last edited by
                                          #36

                                          @Pradeep-P-N

                                          Print was done before disabling
                                          Now done after disable
                                          Inside Pushbutton
                                          ui->Pushbutton->isEnabled() 0
                                          Inside Pushbutton
                                          ui->Pushbutton->isEnabled() 0

                                          Pradeep P NP 1 Reply Last reply
                                          0

                                          • Login

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