QT在子窗口外單擊關閉子窗口


 

1.添加過濾器(eventFilter),

bool eventFilter(QObject *watched, QEvent *event);//過濾器

2.重寫鼠標單擊事件,這兩種方法都要判斷鼠標單擊位置是不是在子窗口上。而且在可編輯控件上如(下拉框、文本編輯框等),父窗口會直接傳遞到可編輯控件上,過濾器和重寫的鼠標事件無法獲取單擊事件。

void mousePressEvent(QMouseEvent *ev);//鼠標事件


3.其實最簡單有效的方法是設置窗口標志位
setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);

Qt::Popup表明此窗口為最上層模態窗口,點擊子窗口之外的位置都會自動隱藏,類似於菜單的效果。

需要注意的是,使用move(point)函數來移動子窗口時,需要用全局坐標,雖然它的父對象沒有變,但是坐標變成了全局坐標,需使用move(mapToGlobal(point))。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM