14

我使用以下行从我的对话框中禁用了 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();
}

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

4

3 回答 3

29

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

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

如果您让关闭按钮 (X) 可见,此方法也会禁止它关闭您的应用程序。

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

于 2012-04-29T05:26:25.077 回答
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
}   

祝我们所有人好运;)

于 2015-03-25T08:27:39.617 回答
1

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

void MyDialog::closeEvent(QCloseEvent* e)
{
    if ( condition )
       e->ignore();
    else
       __super::closeEvent(e);
}
于 2013-10-17T13:47:04.130 回答