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