cpp*_*guy 13 c++ qt qdialog qpushbutton
我有QDialog一个QDialogButtonBox." 确定"和" 取消"按钮处于活动状 有时我会根据对话框的状态禁用或隐藏"确定"按钮.看来,无论我做什么,Enter键总是激活OK按钮.我真的不希望这种情况发生.我试过了:
并且通过上述所有组合,Enter键仍然接受对话框.有没有人知道如何阻止这个?看起来我应该能够阻止这么简单的事情吗?
ale*_*sdm 13
按键事件过滤应该在对话框本身上完成,因为处理将Return和Enter键转发到默认按钮的代码在QDialog::keyPressEvent.
void Dialog::keyPressEvent(QKeyEvent *evt)
{
if(evt->key() == Qt::Key_Enter || evt->key() == Qt::Key_Return)
return;
QDialog::keyPressEvent(evt);
}
Run Code Online (Sandbox Code Playgroud)
要么
theDialog?>installEventFilter(anotherClassObject);
bool AnotherClass::eventFilter(QObject *obj, QEvent *evt)
{
if(evt->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(evt);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return )
return true; // mark the event as handled
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果对话框上有普通的 QPushButtons,那么如果按钮设置了 autoDefault 和/或默认属性,那么您将获得一个默认按钮 - 这是 Enter 键触发的。在这种情况下,删除按钮上的 autoDefault 并在另一个小部件中按 Enter 键将不再关闭对话框。
对于 QDialogButtonBox,您可能可以迭代按钮以在对话框的构造函数中关闭此功能。此处未测试,但应该可以工作。如果没有,那么您还需要查看 QDialog 本身是否也设置了默认按钮。