Qt中mouseMoveEvent無效


最近用Qt軟件界面,需要用到mouseMoveEvent,研究了下,發現些問題,分享一下。

在Qt中要捕捉鼠標移動事件需要重寫MouseMoveEvent,但是MouseMoveEvent為了不太耗資源在默認狀態下是要鼠標按下才能捕捉到。要想鼠標不按下時的移動也能捕捉到,需要setMouseTracking(true)

bool mouseTracking

這個屬性保存的是窗口部件跟蹤鼠標是否生效

如果鼠標跟蹤失效(默認),當鼠標被移動的時候只有在至少一個鼠標按鍵被按下時,這個窗口部件才會接收鼠標移動事件

如果鼠標跟蹤生效,如果沒有按鍵被按下,這個窗口部件也會接收鼠標移動事件。

QWidget中使用是沒有問題的,但是,對於QMainWindow即使使用了setMouseTracking(true)依然無法捕捉到鼠標沒有按下的移動,只有在鼠標按下是才能捕捉。

解決辦法:要先把QMainWindow的CentrolWidget使用setMouseTracking(true)開啟移動監視。然后再把QMainWindow的setMouseTracking(true)開啟監視。之后就一切正常了。

原因:CentrolWidget是QMainWindow的子類,你如果在子類上響應鼠標事件,只會觸發子類的mouseMoveEvent,根據C++繼承和重載的原理,所以子類也要setMouseTracking(true); 所以如果你想響應鼠標事件的控件被某個父控件包含,則該控件及其父控件或容器也需要setMouseTracking(true);

 

轉載地址:http://blog.csdn.net/hcj116/article/details/17334473


免責聲明!

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



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