Details
-
Bug
-
Resolution: Unresolved
-
P4: Low
-
None
-
5.15.17, 6.8.0
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; }