Qt Mac: Escape key has no effect in a QDialog, if a QLineEdit or QSpinBox exists
-
wrote on 4 May 2022, 17:00 last edited by
Hello
I figured that pressing escape button closes some dialogs on the Mac and does not on some others.This can be reproduced simply when calling
bool resultOK = false; QInputDialog::getText(gMainWin, "Title", "text", QLineEdit::Normal, myVar &resultOK);
This dialog is not closed when pressing the Escape Key. Custom dialogs will close using escape as long as the have no QLineEdit and no QSpinBox etc. If they have such a control, escape has no effect.
The same code does not show this behavior on the windows build.
Is this possibly a configuration problem?
Is there a solution / workaround? -
Hi,
Which exact version of Qt are you using ?
Which exact version of macOS ?Can you provide a full minimal compilable that shows this behaviour ?
-
wrote on 4 May 2022, 18:00 last edited by mchinand 5 Apr 2022, 18:01
Is the behavior different if the QLineEdit/QSpinBox in the dialog does or does not have keyboard focus?
-
wrote on 4 May 2022, 19:05 last edited by stefanwoe 5 Apr 2022, 19:06
As stated in the Tags: Qt 6.2.0 MacOs11.6 I dont have a independent sample yet.
-
Is the behavior different if the QLineEdit/QSpinBox in the dialog does or does not have keyboard focus?
wrote on 4 May 2022, 19:08 last edited by@mchinand said in Qt Mac: Escape key has no effect in a QDialog, if a QLineEdit or QSpinBox exists:
Is the behavior different if the QLineEdit/QSpinBox in the dialog does or does not have keyboard focus?
I did not find a way to get the focus away from such controls. Any suggestions? But i think QInputDialog::getText is a perfect example.
-
wrote on 4 May 2022, 19:30 last edited by stefanwoe 5 Apr 2022, 19:31
I can reproduce this with a minimal sample, that just calls QInputDialog::getText. Pressing escape in this dialog has no effect.
mainwindow.cpp:
#include "mainwindow.h" #include <QInputDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { bool resultOK = false; QString newName = QInputDialog::getText(this, "test", "entry", QLineEdit::Normal, "newentry", &resultOK ); } MainWindow::~MainWindow() { }
mainwindow.h
#include <QMainWindow> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); };
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
-
wrote on 9 May 2022, 10:21 last edited by
I filed a bug for this: https://bugreports.qt.io/browse/QTBUG-103338
-
wrote on 9 May 2022, 11:16 last edited by
I can't reproduce this on macOS 12.3.1 with Qt 6.3. Works as it should.
1/8