我使用以下行从我的对话框中禁用了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中禁用它?
按 Alt+F4
会导致关闭事件发送到顶层窗口。在 window 类中,可以重写 closeEvent()
以忽略它并阻止应用程序关闭。
void MainWindow::closeEvent(QCloseEvent * event)
{
event->ignore();
}
如果将关闭按钮 (X) 保持可见,则此方法也会禁止它关闭应用。
这通常用于让应用程序有机会决定是否要关闭,或者通过显示"您确定吗?"消息框来询问用户。
下面的代码可以防止在按 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
}
祝大家好运;)
您也可以在对话框的类中处理事件(至少如果它是模态 dlg):
void MyDialog::closeEvent(QCloseEvent* e)
{
if ( condition )
e->ignore();
else
__super::closeEvent(e);
}