[英]Preventing Qt window from closing in hooked application, Eventfilter does nothing
我已经迷上了一个使用Qt的应用程序。 该应用程序通常显示弹出窗口,当弹出窗口关闭时,弹出对话框的父窗口也会关闭。
我写了一个EventFilter,它应该防止父窗口关闭。 我可以在调试器中看到EventFilter被调用了,但是窗口还是关闭了。
这是过滤器:
bool CloseEventFilter::eventFilter(QObject* object, QEvent* event){
printf("%s\n", parseEvent(event).c_str());
if(event->type() == QEvent::Close){
event->accept();
return true;
}
if(event->type() == QEvent::Hide){
event->accept();
return true;
}
if(event->type() == QEvent::HideToParent){
event->accept();
return true;
}
if(event->type() == QEvent::Destroy){
event->accept();
return true;
}
if(event->type() == QEvent::DeferredDelete){
event->accept();
return true;
}
if(event->type() == QEvent::ChildRemoved){
event->accept();
return true;
}
return false;
}
过滤器有问题吗? 还有其他方法吗?
CloseEvent
不是通过关闭窗口处理的事件。 事件被触发后,将在事件触发后关闭窗口。 因此,在过滤器中接受事件可能会阻止其传播,但不会阻止窗口关闭。
捕获CloseEvent
,您有机会忽略事件而不是接受事件。 仅当事件被接受时,窗口才会关闭,这是默认设置。
如果事件的接收者已经同意关闭小部件,则isAccepted()函数将返回true;否则,此函数将返回true。 调用accept()同意关闭小部件,如果此事件的接收者不希望关闭小部件,则调用ignore()。
这意味着在代码中,您需要调用event->ignore()
而不是event->accept()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.