2017-01-15 16 views
0

GUI 상호 작용을위한 수정 자로 누를 수있는 화면 제어 단추를 구현하려고합니다.MultiPointTouchArea에서 기본 PinchArea steals 이벤트

MouseArea은 하나의 마우스 영역에서 하나의 터치 포인트 만 처리 할 수 ​​있기 때문에 가능하지 않습니다.

해당 제한 사항은 MultiPointTouchArea에는 적용되지 않습니다. 이러한 제한 사항은 여러 개가 있고 동시에 상호 작용할 수 있습니다.

내 경우에는 Flickable 상단에 PinchArea의 상단에 MultiPointTouchArea을 통해 구현되는 제어 버튼이 있습니다. 후자는 Flickable을 통해 구현 된보기의 크기를 조정하는 데 사용됩니다.

그러나 컨트롤 버튼을 누르면 플리커 블과 상호 작용할 수 없으며 버튼을 눌러 핀치 동작을 시작하는 동안 손가락 하나를 놓을 수 있습니다. 이것은 이상합니다. 예상되는 것은 핀치가 영역 내에 두 개의 터치 포인트가있을 때만 시작된다는 것입니다. 어떤 이유로 초기에 터치가 버튼의 이벤트로 등록되었지만 핀치 영역에서 한 터치 포인트가 활성화되는 순간, 버튼 터치 포인트가 핀치 영역에있는 것으로 계산됩니다.

플리커 블 영역 또는 핀치 영역이 없으면 이러한 상황이 발생하지 않으며 두 구성 모두 해당 구성에 있어야합니다. 가볍게 치거나 단지 핀치 영역이면 오버레이 버튼이 예상대로 작동합니다. 또한 단추가 핀치 영역 앞에있는 경우에도 문제가 발생합니다. 버튼을 해제 할 때

import QtQuick 2.7 
import QtQuick.Window 2.2 

Window { 
    id: main 
    visible: true 
    width: 1920 
    height: 1080 

    PinchArea { 
    anchors.fill: parent 
    onPinchUpdated: tt.text = pinch.scale 
    pinch.target: rect 
    Flickable { 
     contentWidth: 2000 
     contentHeight: 2000 
     anchors.fill: parent 
     Rectangle { 
     id: rect 
     width: 200 
     height: 200 
     color: "green" 
     x: 500 
     y: 300 
     } 
    } 
    } 

    Text { 
    anchors.centerIn: parent 
    id: tt 
    } 

    Rectangle { 
    width: 200 
    height: 200 
    anchors.verticalCenter: parent.verticalCenter 
    color: "blue" 
    MultiPointTouchArea { 
     anchors.fill: parent 
     minimumTouchPoints: 1 
     maximumTouchPoints: 1 
     onPressed: parent.color = "red" 
     onReleased: parent.color = "blue" 
    } 
    } 
} 

공지 사항 버튼을 누르고있는 동안 당신이 flickable 한 터치하면 핀치 지역이 트리거됩니다 것을, 그 색상이 변경되지 않습니다

다음은 문제를 재생 코드 즉 방출 된 신호가 방출되지 않으면, 핀치 영역에 의해 이벤트가 효과적으로 도난 당했고, 후자는 뒤쳐져 간섭을 일으키지 않았습니다. 아아,이 시나리오에는 preventStealing 옵션이 없습니다.

이 시점에서이 모양은 yet another Qt bug이지만이 문제를 해결하는 방법에 대한 제안은 많은 도움이 될 것입니다.

답변

0

문제를 조사한 후 몇 시간 만 지나면 실제로 버그 또는 중요한 디자인 제한이있는 것으로 보입니다. 중복되는 터치 영역이 무엇이든 상관없이 동시에 작동 할 수 없었고 심지어 겹치거나 중첩되어 있지 않은 경우에도 서로 다른 영역간에 등록 된 가짜 터치 포인트로 인해 거추장 스럽습니다.

운좋게도 필자는 중첩을 피함으로써이 문제를 해결할 수있었습니다. 오른쪽 flickable이 음의 x 축에서 오프셋되어 화면을 효과적으로 채 웁니다. 귀하의 경우 터치 영역을 중복의 동시 사용을 위해 호출하는 경우

import QtQuick 2.7 
import QtQuick.Window 2.2 

Window { 
    id: main 
    visible: true 
    width: 1920 
    height: 1080 

    PinchArea { 
    height: parent.height // 
    x: btn.width // 
    width: parent.width - x // 
    Flickable { 
     contentWidth: 2000 
     contentHeight: 2000 
     height: parent.height // 
     width: main.width // 
     x: -btn.x // 
     Rectangle { 
     id: rect 
     width: 200 
     height: 200 
     color: "green" 
     x: 500 
     y: 300 
     } 
    } 
    } 

    Text { 
    anchors.centerIn: parent 
    id: tt 
    } 

    Rectangle { 
    id: btn 
    width: 200 
    height: 200 
    anchors.verticalCenter: parent.verticalCenter 
    color: "blue" 
    MultiPointTouchArea { 
     anchors.fill: parent 
     minimumTouchPoints: 1 
     maximumTouchPoints: 1 
     onPressed: parent.color = "red" 
     onReleased: parent.color = "blue" 
    } 
    } 
} 

그러나, 버그가 정리됩니다 때까지 당신이 운이 있습니다 나타납니다.