我已禁用X按钮在Qt中使用此行我的对话:
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)可见,这种方法也将从关闭您的应用程序禁用它。
这通常是用来给应用程序一个机会,以决定是否要通过显示的关闭与否或者询问用户“你确定吗?” 消息框。
下面的代码防止当通过调用SomeDialog :: close()方法按下Alt + F4键,[X]或Escape,但不是一个对话关闭。
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);
}