QDialog 中的 Escape 仅在模态模式下有效?

Escape in QDialog works only in modal mode?

Esc 在非模态模式下对我的对话框不起作用,事件转到底层 window。仅添加

setWindowModality(Qt::WindowModal);

创建对话框使 Esc 键起作用并调用 reject() 插槽。 Esc in/from 非模态对话框是正常的还是可能的?

如果您制作自定义 QDialog,也许可以使用事件过滤器?如果你打电话

qApp->installEventFilter(yourQDialog);

创建的时候可以定义函数

bool eventFilter(QObject *watched, QEvent *event);

赶上你要找的"esc"。更多关于事件过滤器的信息:http://doc.qt.io/qt-5/qobject.html#installEventFilter.

已更改

dialog->show();

打电话给

// Shows the dialog as a modal dialog, blocking until the user closes it.
dialog->exec();

目前工作正常。似乎是在对话框中捕获事件的唯一方法,non-modal 不允许这样做或使用另一个答案中提到的关键事件过滤器。