如何使用Qt禁用Alt + F4窗口关闭



我使用以下行从我的对话框中禁用了Qt中的X按钮:

myDialog->setWindowFlags(Qt::Dialog | Qt::Desktop)

但我无法使用以下代码检测 Alt + F4

void myClass::keyPressEvent(QKeyEvent *e)
{
    if ((e->key()==Qt::Key_F4) && (e->modifiers()==Qt::AltModifier))
        doSomething();
}

我应该怎么做才能检测Alt+F4或在Qt中禁用它?

Alt+F4 会导致关闭事件发送到顶层窗口。在 window 类中,可以重写 closeEvent() 以忽略它并阻止应用程序关闭。

void MainWindow::closeEvent(QCloseEvent * event)
{
    event->ignore();
}

如果将关闭按钮 (X) 保持可见,则此方法也会禁止它关闭应用。

这通常用于让应用程序有机会决定是否要关闭,或者通过显示"您确定吗?"消息框来询问用户。

下面的代码可以防止在按 Alt+F4、[X] 或 Escape 时关闭对话框,但不能通过调用 SomeDialog::close() 方法。

void SomeDialog::closeEvent(QCloseEvent *evt) {
    evt->setAccepted( !evt->spontaneous() );
}   
void SomeDialog::keyPressEvent(QKeyEvent *evt) {
    // must be overridden but empty if the only you need is to prevent closing by Escape
}   

祝大家好运;)

您也可以在对话框的类中处理事件(至少如果它是模态 dlg):

void MyDialog::closeEvent(QCloseEvent* e)
{
    if ( condition )
       e->ignore();
    else
       __super::closeEvent(e);
}

相关内容

  • 没有找到相关文章

最新更新