2013-07-30 3 views
12

MouseArea의 positionChanged 이벤트를 기본 이벤트로 전파 할 수 있습니까?QML - MouseArea - onPositionChanged 전파

나는 맨 위 MouseArea의 기존 신호 처리기의 mouse.acceptedfalse에 설정뿐만 아니라 propagateComposedEventstrue에 설정하려고했습니다. 그 중 아무도 작동하지 않습니다. 비록 설명서가 clicked, doubleClickedpressAndHold과 같은 이벤트 만 릴레이한다고 말하기 때문에 propagateComposedEvents이 작동하지 않는다고 놀랍지는 않습니다.

+0

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

답변

3

구조에 따라 onPositionChanged 핸들러가 underlyingMouseArea.positionChanged (마우스)를 호출하여 이벤트를 수동으로 전파 할 수 있습니다. 기본 MouseArea에서 신호를 수동으로 방출해야합니다. 내 유일한 관심사는 당신이 MouseEvent 객체를 이런 식으로 전달할 수 없을 수도 있다는 것이다. 그러나, C++로 언제나이 매뉴얼 방출을 수행 할 수 있습니다. 이것은 분명히 타입 변환 문제가 없습니다. 여러 마우스 영역과 위치 변경 이벤트를 처리 할 필요가없는 한

+0

현재로서는 현재 마우스 위치 정보가 포함 된 루트 구성 요소에 속성을 추가했습니다 (현재 유일한 정보이기 때문에). 에 관심이있다). 위치 get는, 컴퍼넌트의 MouseArea 및 모든 기본이되는 area에 의해 갱신됩니다. 너무 예쁘지 않고 유지하기가 약간 어렵습니다 (앞서 언급 한 것처럼 모든 기본 'MouseArea'의 값을 별도로 업데이트해야 함)하지만 작동합니다. –

1

동시에 당신은 당신의 최고의 마우스를 영역을 reparent 시도 할 수 :

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 있습니다.