1. 程式人生 > >解決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中響應三個訊號。或者自定義一個圖元基類,實現事件識別與處理函式分配,並定義三個虛擬函式,用於子類重新實現自定義事件響應。