QT在子窗口外單擊關閉子窗口 Popup 不能中文輸入


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

bool eventFilter(QObject *watched, QEvent *event);//過濾器
 void mousePressEvent(QMouseEvent *ev);//鼠標事件

其實最簡單有效的方法是設置窗口標志位

setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
Qt::Popup表明此窗口為最上層模態窗口,點擊子窗口之外的位置都會自動隱藏,類似於菜單的效果。需要注意的是,使用move(point)函數來移動子窗口時,需要用全局坐標,雖然它的父對象沒有變,但是坐標變成了全局坐標,需使用move(mapToGlobal(point))。

有人會發現,彈出的模態框有文本輸入框時無法輸入中文,解決方法如下
widgetPopUp->show(); 
widgetPopUp->activateWindow();//在顯示窗口后激活此窗口

原因可能彈出窗口是取消了標題欄,所以窗口無法激活,不能獲取鍵盤輸入焦點,看下這個函數的說明


免責聲明!

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



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