如何防止回车键关闭我的 QDialog (Qt 4.8.1)

2024-01-29

我有一个QDialog with a QDialogButtonBox. The OK and Cancel按钮处于活动状态。有时,我会根据对话框的状态禁用或隐藏“确定”按钮。看来,无论我做什么,Enter 键总是会激活“确定”按钮。我真的不希望这种事发生。我努力了:

  • 每次显示/隐藏/启用/禁用/无论按钮时,将默认和自动默认属性设置为 false
  • 在 OK 按钮上安装事件过滤器,拦截回车、回车和空格键事件(按下和释放)
  • 将按钮上的焦点策略设置为NoFocus

对于上述所有内容的组合,Enter 键仍然接受该对话框。有谁知道如何阻止这个吗?看来这么简单的事情我应该都能阻止吧?


按键事件过滤应该在对话框本身上完成,因为处理转发的代码Return and Enter默认按钮的键位于QDialog::keyPressEvent.

void Dialog::keyPressEvent(QKeyEvent *evt)
{
    if(evt->key() == Qt::Key_Enter || evt->key() == Qt::Key_Return)
        return;
    QDialog::keyPressEvent(evt);
}

Or

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止回车键关闭我的 QDialog (Qt 4.8.1) 的相关文章