Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-132878

QPushButton::released event is not handled

    XMLWordPrintable

Details

    Description

      QPushButton::released event is not handled when button pressed and processEvents() is handled manually in QLineEdit event handler 

      Steps to reproduce the issue:

      -Add or modify edit text box

      -Press Dummy button and observe the Button State

       

       

      // window.h
      #ifndef WINDOW_H
      #define WINDOW_H
      #include <QWidget>
      QT_BEGIN_NAMESPACE
      class QLabel;
      class QLineEdit;
      class QProgressBar;
      class QPushButton;
      class QFrame;
      class QCheckBox;
      QT_END_NAMESPACE
      class Window : public QWidget
      {
          Q_OBJECT
          
      public:
          Window(QWidget *parent = nullptr);
          
      public slots:
          void editingFinished();
          void buttonPressed();
          void buttonReleased();
          
      private:
          void updateImage();
          
          bool abortFlag_{ false };
          bool isRunning_{ false };
          QLabel *btnStateLbl_{ nullptr };
          QLineEdit *le1_{ nullptr };
          QProgressBar *progress_{ nullptr };
          QFrame * mainFrame_{ nullptr };
      };
      #endif
      

       

       

      // window.cpp
      #include "window.h"
      #include <QApplication>
      #include <QBrush>
      #include <QCheckBox>
      #include <QElapsedTimer>
      #include <QLabel>
      #include <QLineEdit>
      #include <QPainter>
      #include <QPixmap>
      #include <QProgressBar>
      #include <QPushButton>
      #include <QRect>
      #include <QVBoxLayout>
      #include <QValidator>
      
      Window::Window(QWidget *parent)
          : QWidget(parent)
      {
          setWindowTitle(tr("Sample"));
          QVBoxLayout *vbox = new QVBoxLayout;
          le1_ = new QLineEdit;
          vbox->addWidget(le1_);
          QPushButton *btn1 = new QPushButton("Dummy (Does nothing)");
          vbox->addWidget(btn1);
          btnStateLbl_ = new QLabel("Button State:");
          vbox->addWidget(btnStateLbl_);
          mainFrame_ = new QFrame;
          mainFrame_->setLayout(vbox);
          vbox = new QVBoxLayout;
          vbox->addWidget(mainFrame_);
       
          progress_ = new QProgressBar();
          vbox->addWidget(progress_);
          connect(le1_, &QLineEdit::editingFinished,
                  this, &Window::editingFinished);
          connect(btn1, &QPushButton::pressed,
                  this, &Window::buttonPressed);
          connect(btn1, &QPushButton::released,
                  this, &Window::buttonReleased);
      
          setLayout(vbox);
      }
      
      void
      Window::editingFinished()
      {
          updateImage();
      }
      void
      Window::buttonPressed()
      {
          btnStateLbl_->setText("Button State: Pressed");
      }
      void
      Window::buttonReleased()
      {
          btnStateLbl_->setText("Button State: Released");
      }
      
      void
      Window::updateImage()
      {
          if (isRunning_) {
              return;
          }
          isRunning_ = true;
          // We assume for the purposes of this example that updating the image takes
          // a long time.
          QElapsedTimer timer;
          timer.start();
          static constexpr int totalMsec{ 2000 };
          progress_->setRange(0, totalMsec);
          while (totalMsec >= timer.elapsed()) {
              progress_->setValue(timer.elapsed());
              qApp->processEvents();
          }
          progress_->reset();
          isRunning_ = false;
      }
      

       

       

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            vhilshei Volker Hilsheimer
            kitruong Kinh Truong
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes