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

Moh*_*lam 13 qt qt4 keypress qdialog qkeyevent

我使用这一行在我的对话框中禁用了Qt中的X按钮:

myDialog->setWindowFlags(Qt::Dialog | Qt::Desktop)
Run Code Online (Sandbox Code Playgroud)

但我无法使用此代码检测到Alt+ F4:

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

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

Arn*_*nce 26

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

void MainWindow::closeEvent(QCloseEvent * event)
{
    event->ignore();
}
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

下面的代码阻止在按下 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
}   
Run Code Online (Sandbox Code Playgroud)

祝我们大家好运;)