如何禁用使用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
}
好运,我们所有的;)
你已经得到了两个错误:它是'keyPressEvent(QKeyEvent * EVT)''Press'不'Pressed'和类型是不同的。但是,应用此修复程序...它运行良好。 :) – 2017-01-12 20:03:49
只是重写keyPressEvent(QKeyEvent * EVT)和留空,可能会引起其他问题,如不输入工作可能需要关键的行为,例如,当我们要允许用户通过点击回车键继续。因此,在这种特定情况下定义我们不想明确允许的密钥会更好。换句话说,最好调用BaseWidget :: keyPressEvent(evt),其中BaseWidget是继承的东西(可以是QWidget,QDialog等) – 2017-08-29 14:25:14