Qt mouseMoveEvent無效的問題


最近在Qt的學習中遇到了一個問題,就是重寫了mouseMoveEvent,在其中打印鼠標移動的坐標信息卻無效
在這里插入圖片描述
在Qt中要捕捉鼠標移動信息需要重寫mouseMoveEvent,但是mouseMoveEvent為了不太消耗資源在默認情況下是需要按下鼠標移動才能捕捉到,想要在鼠標沒有按下的情況下也能捕捉鼠標,需要對窗口設置setMouseTracking(true).
在這里插入圖片描述
此屬性保存是否為小部件啟用了鼠標跟蹤
如果禁用了鼠標跟蹤(默認設置),則僅在移動鼠標時按下至少一個鼠標按鈕時,窗口小部件才會接收鼠標移動事件。
如果啟用了鼠標跟蹤,則即使未按下任何按鈕,小部件也將接收鼠標移動事件。

在Qwidget中使用是沒有問題的,但是在QMainWindow中即使設置了mouseTracking卻依然無法捕捉到鼠標沒有按下時的移動,只有按下鼠標任意一個按鍵移動時才有效
解決辦法就是將QMainWindow中的centrolWidget也設置mouseTracking,之后就可以捕捉沒有按下鼠標時的移動了
在這里插入圖片描述

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


免責聲明!

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



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