QML MouseArea 嵌套鼠標點擊事件失效問題

QML MouseArea重疊失效問題

當有兩個MouseArea重疊時,鼠標按下、擡起、點擊操作,正常情況下是響應後面一個MouseArea的操作。

在這裏插入圖片描述
結果:
qml: blue pressed
qml: blue released
qml: blue clicked

若在某些條件下想要響應red的操作,某些條件下想響應blue的操作呢?

對於嵌套MouseArea事件傳遞,有propagateComposedEvents屬性,當爲true時可以傳遞鼠標事件,默認值爲false,所以默認是上述結果。

當propagateComposedEvents爲true時,事件觸發後,添加mouse.accepted = false語句,事件便可傳遞到下層mouseArea。
在這裏插入圖片描述
結果:
qml: blue pressed
qml: Red pressed
qml: Red released
qml: red clicked

那麼問題來了,若red按下之後便失效了,會怎樣?
在上述基礎上按下時加上mouser.visible=false。
輸出:
qml: blue pressed
qml: blue pressed
這個很好理解,因爲按下時,blue收到按下操作,然後事件傳遞到red,red執行按下操作之後red失效,那麼擡起和點擊操作就識別不到了。

而且,即使後續red再次有效後,也不能收到事件。

** 總結 **
涉及到MouseArea嵌套,且有鼠標區域有設置可見不可見時,應該要特別留意,若發生上述:失效前收到的是按下事件,沒有收到擡起事件,那麼當它再次有效時,也無法再收到擡起事件,那麼點擊事件就會無效了。

解決時,可以用組件封裝MouseArea,通過控制組件的可見性來達到鼠標區域可點與不可點的效果。
另外就是用MultiPointTouchArea代替MouseArea,可以避免上述問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章