2013-07-30 56 views
12

是否可以傳播MouseArea的positionChanged事件到底層?QML - MouseArea - 傳播onPositionChanged

我試圖設置mouse.acceptedfalse爲最頂層MouseArea任何現有的信號處理程序,以及設置propagateComposedEventstrue。這兩種工作都沒有效果(儘管我對propagateComposedEvents無法工作並不感到驚訝,因爲文檔說它只會傳遞像clicked,doubleClickedpressAndHold這樣的事件)。

+0

https://bugreports.qt-project.org/browse/QTBUG-37545 –

回答

3

根據您的結構,您可以通過讓onPositionChanged處理程序調用underlyingMouseArea.positionChanged(mouse)來手動傳播事件。這應該在底層MouseArea中手動發出信號。我唯一擔心的是,你可能無法以這種方式傳遞MouseEvent對象(從來沒有嘗試除字符串以外的其他任何東西)。但是,您始終可以在C++中執行此手冊,而這些手冊肯定不會遇到任何類型轉換問題。

+0

那麼現在我已經添加了一個屬性到包含當前鼠標位置的根組件(因爲那是我目前唯一的信息有興趣)。位置get由組件的'MouseArea'以及所有基礎區域更新。不太漂亮並且難以維護(我必須記住,在所有底層的'MouseArea's中分別更新這個值,就像你剛纔提到的那樣),但它是有效的。 –

1

除非你需要處理多個鼠標區域位置變化事件同時發生,你可以嘗試重定位你的頂部鼠標區域:

import QtQuick 2.2 
import QtQuick.Layouts 1.1 

Rectangle { 
    id: __root 
    color: "lightgreen" 
    width: 360 
    height: 360 

    Rectangle { 
     id: rect2 
     width: 100; height: 100 
     color: "cyan" 
     MouseArea { 
      parent: __root // set 'logical' parent 
      anchors.fill: rect2 // set 'visual' ancestor 
      hoverEnabled: true 

      onPositionChanged: { 
       console.log('mouse area 2 onPositionChanged'); 
      } 
     } 
    } 


    MouseArea { 
     anchors.fill: parent 
     hoverEnabled: true 

     onPositionChanged: { 
      console.log('mouse area 1 onPositionChanged'); 
     } 
    } 
} 

有一個unresolved bugreport