-->

我如何使用Qt禁用ALT + F4窗口关闭?(How can I disable Alt + F4

2019-07-29 04:31发布

我已禁用X按钮在Qt中使用此行我的对话:

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中禁用它?

Answer 1:

按下Alt+F4在关闭事件结果被发送到你的顶层窗口。 在你的窗口类,则可以覆盖closeEvent()忽略它并阻止应用程序关闭。

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

如果你离开了关闭按钮(X)可见,这种方法也将从关闭您的应用程序禁用它。

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



Answer 2:

下面的代码防止当通过调用SomeDialog :: close()方法按下Alt + F4键,[X]或Escape,但不是一个对话关闭。

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
}   

好运来我们所有的;)



Answer 3:

你也可以处理在对话框的类事件(如果它至少模式DLG):

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


文章来源: How can I disable Alt + F4 window closing using Qt?