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

Key release event lost

    XMLWordPrintable

Details

    • Windows

    Description

      We have functionality that depends on Ctrl button.  

      class MainWindow: public QMainWindow
      {
        Q_PROPERTY(bool isCtrlPressed READ isCtrlPressed WRITE setIsCtrlPressed NOTIFY
                       isCtrlPressedChanged)
      public: 
      MainWindow() {
          connect(this, &MainWindow::isCtrlPressedChanged, this, [this] {
            ui->label->setText(m_isCtrlPressed ? "PRESSED" : "NOT PRESSED");
          });
          ui->label->setText("NOT PRESSED");
      }
      
      protected:
        void keyPressEvent(QKeyEvent *event) override {
          if (event->key() == Qt::Key_Control) {
            setIsCtrlPressed(true);
          }
          QMainWindow::keyPressEvent(event);
        }
        void keyReleaseEvent(QKeyEvent *event) override {
          if (event->key() == Qt::Key_Control) {
            setIsCtrlPressed(false);
          }
          QMainWindow::keyReleaseEvent(event);
        }
      
        bool isCtrlPressed() const { return m_isCtrlPressed; }
      
        void setIsCtrlPressed(bool aIsPressed) {
          if (m_isCtrlPressed != aIsPressed) {
            m_isCtrlPressed = aIsPressed;
            emit isCtrlPressedChanged();
          }
        }
      signals:
        void isCtrlPressedChanged();
      private: 
        bool m_isCtrlPressed{false};
      

      In that case everything works as expected.

       

      But in case we add shortcut ("Ctrl+O") to open system dialog, release event is not received if ctrl was release while system dialog visible.

       

      QAction *openAction = new QAction;
      openAction->setShortcut(QKeySequence("Ctrl+O"));
      connect(openAction, &QAction::triggered, this, &MainWindow::onFileDialogRequested);
      addAction(openAction);
      
      private slots:
        void onFileDialogRequested() {
          auto names =
              QFileDialog::getOpenFileName(this, "Open file", QDir::currentPath());
      
          qDebug() << names;
        }
      

      Source code attached: QtCtrl.7z

       

      Attachments

        Activity

          People

            srutledg Shawn Rutledge
            xakerok92 Aleksander Movchan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: