解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
生活随笔
收集整理的這篇文章主要介紹了
解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題重現
兩個圖元,一個在上面,名為item_up,一個在下面,名為item_below。
當item_up->setAcceptHoverEvents(true)時,item_up可以接收到鼠標懸停事件(hoverEnter,hoverMove,hoverMove)。但是下層的item_below在重疊區域就接收不到懸停信號了。除非item_up->setAcceptHoverEvents(false),item_below才能在鼠標經過重疊區域時接收到懸停信號組。
問題分析
采用過各種方法,都不能很好地解決這個問題。于是最終考慮采用自定義事件的方法,自己實現。
解決方案
自定義三個事件,鼠標進入,鼠標移動,鼠標退出。
在畫布的鼠標移動事件處理函數mouseMoveEvent中,將鼠標事件轉換為圖元的鼠標選題懸停事件,發送給當前鼠標下的所有圖元,并結合判斷acceptHoverEvents()來確定圖元是否需要接收此事件,減少計算量。
在圖元中的sceneEvent中響應三個信號。或者自定義一個圖元基類,實現事件識別與處理函數分配,并定義三個虛函數,用于子類重新實現自定義事件響應。
note
使用event->ignore()不能解決重疊導致的事件傳遞中斷問題。
點擊事件即使在圖元重疊的狀態下也可以接收到。
總結
以上是生活随笔為你收集整理的解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长辈方便了!阿里完成15款App信息无障
- 下一篇: 外国人在日本大量扫货回国倒卖 苹果手机/