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

问题描述:

我用这条线已经禁用X按钮,在Qt的从我的对话框:如何禁用使用Qt的Alt + F4窗口关闭?

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导致关闭事件被发送到你的顶层窗口。在您的窗口课程中,您可以覆盖closeEvent()以忽略它并阻止您的应用程序关闭。

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

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

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

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

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

下面的代码可以防止当按下Alt + F4对话框关闭,[X]或逃跑,但而不是通过调用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 
} 

好运,我们所有的;)

+0

你已经得到了两个错误:它是'keyPressEvent(QKeyEvent * EVT)''Press'不'Pressed'和类型是不同的。但是,应用此修复程序...它运行良好。 :) – 2017-01-12 20:03:49

+0

只是重写keyPressEvent(QKeyEvent * EVT)和留空,可能会引起其他问题,如不输入工作可能需要关键的行为,例如,当我们要允许用户通过点击回车键继续。因此,在这种特定情况下定义我们不想明确允许的密钥会更好。换句话说,最好调用BaseWidget :: keyPressEvent(evt),其中BaseWidget是继承的东西(可以是QWidget,QDialog等) – 2017-08-29 14:25:14