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

时间:2012-04-29 05:02:06

标签: qt qt4 keypress qdialog qkeyevent

我已使用以下行在我的对话框中禁用了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中禁用它?

3 个答案:

答案 0 :(得分:24)

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

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

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

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

答案 1 :(得分:3)

下面的代码可以防止在按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
}   
祝所有人好运;)

答案 2 :(得分:0)

此外,你可以在对话框的类中处理事件(至少如果是模态dlg):

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