簡體   English   中英

防止Qt窗口在掛鈎的應用程序中關閉,Eventfilter不會執行任何操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM