QML: предотвращение возврата к границам события касания для мерцания - PullRequest
2 голосов
/ 05 марта 2020

Я создаю функцию повышения и масштабирования в QML. Из соображений производительности pinchArea является дочерним элементом элемента, который можно перевернуть.

Код ниже настроен так, что если пользователь дважды нажимает на изображение после манипуляции, изображение перецентрируется и масштаб сбрасывается на 1.

Нежелательное поведение is : есть функция мерцающего элемента, при которой, если пользователь нажимает где-то на экране после увеличения / перемещения изображения, элемент перецентрируется. Я не хочу, чтобы изображение самоцентрировалось после касания экрана, вместо этого я хочу управлять поведением с помощью двойного щелчка

Один из способов, которым я могу частично решить эту проблему, - использование области мыши, но область мыши перемещается, когда перемещаемый элемент перемещается, и щелчок за пределами области мыши перецентрирует элемент. Любые идеи о том, как изменить область мыши так, чтобы это действие было предотвращено, или отключить поведение касания мерцающего элемента и его центрирования после увеличения и увеличения?

Спасибо за помощь / совет!

import QtQuick 2.0

Rectangle {
    width: 640
    height: 360
    color: "gray"

    Flickable {
        id: flick
        anchors.fill: parent
        contentWidth: 500
        contentHeight: 500

        Rectangle {
            width: flick.contentWidth
            height: flick.contentHeight
            id: imageFlick

            gradient: Gradient {
                GradientStop { position: 0.0; color: "red" }
                GradientStop { position: 1.0; color: "white" }
            }
        }

        PinchArea {
            width: Math.max(flick.contentWidth, flick.width)
            height: Math.max(flick.contentHeight, flick.height)

            pinch.minimumScale: 1
            pinch.maximumScale: 10
            pinch.dragAxis: Pinch.XAndYAxis
            pinch.target: imageFlick

            property real initialWidth
            property real initialHeight

            onPinchStarted: {
                initialWidth = flick.contentWidth
                initialHeight = flick.contentHeight
                flick.interactive = false
            }

            onPinchUpdated: {
                flick.contentX += pinch.previousCenter.x - pinch.center.x
                flick.contentY += pinch.previousCenter.y - pinch.center.y
            }

            onPinchFinished: {
                flick.interactive = true
            }

            MouseArea {
                anchors.fill: flick
                width: flick.width
                height: flick.height

                //Prevents behaivor of recentering on tap within mouse area
                //                onClicked: {
                //                    flick.cancelFlick()
                //                }

                //For debugging - if tap inside area, recentering doesn't happen. If you tap
                // outside of area, recentering happens
                //                Rectangle {
                //                    anchors.fill:parent
                //                    color: "blue"
                //                }

                onDoubleClicked: {
                    flick.contentX = 0
                    flick.contentY = 0
                    imageFlick.scale = 1
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...