Details
-
Bug
-
Resolution: Invalid
-
Not Evaluated
-
None
-
5.15
-
None
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