Spec-Zone.ru › Qt

Тип QML PinchHandler

Обработчик жестов с двумя пальцами. Подробнее...

Оператор импорта: import QtQuick
Наследует:

MultiPointHandler

  • Список всех членов, включая унаследованные

Свойства

  • acceptedButtons : flags
  • acceptedDevices : flags
  • acceptedModifiers : flags
  • acceptedPointerTypes : flags
  • active : bool
  • activeScale : real
  • centroid : QtQuick::HandlerPoint
  • cursorShape : Qt::CursorShape
  • dragThreshold : int
  • enabled : bool
  • grabPermissions : flags
  • margin : real
  • maximumRotation : real
  • maximumScale : real
  • minimumRotation : real
  • minimumScale : real
  • parent : Item
  • rotation : real
  • scale : real
  • target : Item
  • translation : QVector2D
  • xAxis
    • xAxis.enabled : bool
    • xAxis.maximum : real
    • xAxis.minimum : real
  • yAxis
    • yAxis.enabled : bool
    • yAxis.maximum : real
    • yAxis.minimum : real

Сигналы

  • canceled(EventPoint point)
  • grabChanged(GrabTransition transition, EventPoint point)

Подробное описание

PinchHandler — это обработчик, который интерпретирует жест с двумя пальцами для интерактивного вращения, масштабирования и перемещения элемента Item. Как и другие обработчики ввода, по умолчанию он полностью функционален и манипулирует своим target, который представляет собой элемент Item, в котором он объявлен.

import QtQuick 2.12

Rectangle {
    width: 400
    height: 300
    color: "lightsteelblue"
    PinchHandler { }
}

Он имеет свойства для ограничения диапазона перемещения, вращения и масштабирования.

Если он объявлен внутри одного элемента Item, но ему назначен другой target, он обрабатывает события в пределах границ внешнего элемента Item, но манипулирует элементом target:

import QtQuick 2.12

Item {
    width: 640
    height: 480

    Rectangle {
        id: map
        color: "aqua"
        width: 400
        height: 300
    }

    PinchHandler {
        target: map
    }
}

Третий способ его использования — установить target в значение null и реагировать на изменения свойств другим способом:

import QtQuick 2.12

Item {
    width: 640
    height: 480

    PinchHandler {
        id: handler
        target: null
    }

    Text {
        color: handler.active ? "darkgreen" : "black"
        text: handler.rotation.toFixed(1) + " degrees\n" +
              handler.translation.x.toFixed(1) + ", " + handler.translation.y.toFixed(1) + "\n" +
              (handler.scale * 100).toFixed(1) + "%"
    }
}

Примечание: Прижатие начинается, когда количество нажатых пальцев находится в диапазоне от minimumPointCount до maximumPointCount включительно. До этого PinchHandler отслеживает позиции нажатых пальцев, но если это недопустимое количество, он не масштабирует и не вращает свой target, и свойство active остается false.

См. также PinchArea, QPointerEvent::pointCount() и QNativeGestureEvent::fingerCount().

Документация по свойствам

acceptedButtons : flags

Кнопки мыши, которые могут активировать этот обработчик указателя.

По умолчанию это свойство установлено в значение Qt.LeftButton. Оно может быть установлено в логическое ИЛИ сочетание кнопок мыши и будет игнорировать события от других кнопок.

Например, управление может реагировать на левые и правые щелчки по-разному, с двумя обработчиками:

Item {
    TapHandler {
        onTapped: console.log("left clicked")
    }
    TapHandler {
        acceptedButtons: Qt.RightButton
        onTapped: console.log("right clicked")
    }
}

Примечание: Нажатие на сенсорный экран или нажатие стилусом на графический планшет имитирует щелчок левой кнопкой мыши. Это поведение можно изменить с помощью acceptedDevices или acceptedPointerTypes.

acceptedDevices : flags

Типы указательных устройств, которые могут активировать этот обработчик указателя.

По умолчанию это свойство установлено в значение PointerDevice.AllDevices. Если вы установите его в логическое ИЛИ сочетание типов устройств, оно будет игнорировать события от устройств, не соответствующих заданным.

Например, управление может реагировать на щелчки мышью и стилусом одним способом, а на нажатия на сенсорном экране — другим способом, с двумя обработчиками:

Item {
   TapHandler {
       acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus
       onTapped: console.log("clicked")
   }
   TapHandler {
       acceptedDevices: PointerDevice.TouchScreen
       onTapped: console.log("tapped")
   }
}

acceptedModifiers : flags

Если это свойство установлено, то для реакции на события указателя потребуются заданные модификаторы клавиатуры, а в противном случае они будут игнорироваться.

Если это свойство установлено в значение Qt.KeyboardModifierMask (значение по умолчанию), то обработчик PointerHandler игнорирует клавиши модификаторов.

Например, элемент Item может иметь два обработчика одного типа, один из которых активируется только при нажатии необходимых клавиш модификаторов:

Item {
   TapHandler {
       acceptedModifiers: Qt.ControlModifier
       onTapped: console.log("control-tapped")
   }
   TapHandler {
       acceptedModifiers: Qt.NoModifier
       onTapped: console.log("tapped")
   }
}

Если вы установите acceptedModifiers в логическое ИЛИ сочетание клавиш модификаторов, это означает, что для активации обработчика должны быть нажаты все эти модификаторы:

Item {
   TapHandler {
       acceptedModifiers: Qt.ControlModifier | Qt.AltModifier | Qt.ShiftModifier
       onTapped: console.log("control-alt-shift-tapped")
   }
}

Доступные модификаторы:

Постоянная Описание
NoModifier Ни одна клавиша модификатора не допускается.
ShiftModifier Должна быть нажата клавиша Shift на клавиатуре.
ControlModifier Должна быть нажата клавиша Ctrl на клавиатуре.
AltModifier Должна быть нажата клавиша Alt на клавиатуре.
MetaModifier Должна быть нажата клавиша Meta на клавиатуре.
KeypadModifier Должна быть нажата кнопка на циферблате.
GroupSwitchModifier Только X11 (если не активировано на Windows с помощью параметра командной строки). Должна быть нажата клавиша переключения режима на клавиатуре.
KeyboardModifierMask Обработчик не заботится о нажатых модификаторах.

Если вам нужно поведение, более сложное, чем то, которое можно получить с помощью комбинаций нескольких обработчиков с несколькими флагами модификаторов, вы можете проверить модификаторы в JavaScript-коде:

Item {
    TapHandler {
        onTapped:
            switch (point.modifiers) {
            case Qt.ControlModifier | Qt.AltModifier:
                console.log("CTRL+ALT");
                break;
            case Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier:
                console.log("CTRL+META+ALT");
                break;
            default:
                console.log("other modifiers", point.modifiers);
                break;
            }
    }
}

См. также Qt::KeyboardModifier.

acceptedPointerTypes : flags

Типы указательных устройств (палец, стилус, ластик и т. д.), которые могут активировать этот обработчик указателя.

По умолчанию это свойство установлено в значение PointerDevice.AllPointerTypes. Если вы установите его в логическое ИЛИ сочетание типов устройств, оно будет игнорировать события от устройств, не соответствующих заданным.

Например, управление может реагировать на щелчки мышью, касаниями и щелчки стилусом каким-либо образом, но само удаляется, если нажатие выполняется инструментом ластика на графическом планшете, с двумя обработчиками:

Rectangle {
   id: rect
   TapHandler {
       acceptedPointerTypes: PointerDevice.GenericPointer | PointerDevice.Finger | PointerDevice.Pen
       onTapped: console.log("clicked")
   }
   TapHandler {
       acceptedPointerTypes: PointerDevice.Eraser
       onTapped: rect.destroy()
   }
}

[только для чтения] active : bool

Это свойство true когда все ограничения (особенно minimumPointCount и maximumPointCount) выполнены, и target, если он есть, подвергается манипуляциям.

[только для чтения] activeScale : real

Коэффициент масштабирования во время выполнения жеста с двумя пальцами. Он равен 1.0 при начале жеста, увеличивается при разведении точек касания и уменьшается при сближении точек касания. Если target не равен null, его scale будет автоматически умножен на это значение. В противном случае привязки могут использоваться для выполнения произвольных действий с этим значением.

[только для чтения] centroid : QtQuick::HandlerPoint

Точка, точно расположенная посередине текущих нажатых точек касания. Целевой объект будет вращаться вокруг этой точки.

[с 5.15] cursorShape : Qt::CursorShape

Это свойство содержит форму курсора, которая будет отображаться всякий раз, когда указатель мыши находится над элементом родитель, в то время как active равно true.

Доступные формы курсора:

  • Qt.ArrowCursor
  • Qt.UpArrowCursor
  • Qt.CrossCursor
  • Qt.WaitCursor
  • Qt.IBeamCursor
  • Qt.SizeVerCursor
  • Qt.SizeHorCursor
  • Qt.SizeBDiagCursor
  • Qt.SizeFDiagCursor
  • Qt.SizeAllCursor
  • Qt.BlankCursor
  • Qt.SplitVCursor
  • Qt.SplitHCursor
  • Qt.PointingHandCursor
  • Qt.ForbiddenCursor
  • Qt.WhatsThisCursor
  • Qt.BusyCursor
  • Qt.OpenHandCursor
  • Qt.ClosedHandCursor
  • Qt.DragCopyCursor
  • Qt.DragMoveCursor
  • Qt.DragLinkCursor

Значение по умолчанию не установлено, что позволяет отображаться курсору элемента родитель. Это свойство можно сбросить до первоначального состояния, установив его в undefined.

Примечание: Если это свойство не установлено или установлено в undefined, при чтении значения будет возвращено значение Qt.ArrowCursor.

Это свойство было добавлено в Qt 5.15.

См. также Qt::CursorShape, QQuickItem::cursor() и HoverHandler::cursorShape.

[с 5.15] dragThreshold : int

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

Значение по умолчанию зависит от платформы и разрешения экрана. Его можно сбросить до значения по умолчанию, установив его в undefined. Поведение при начале жеста перетаскивания отличается в различных обработчиках.

Это свойство было добавлено в Qt 5.15.

enabled : bool

Если обработчик PointerHandler отключен, он отклонит все события, и сигналы не будут выпущены.

grabPermissions : flags

Это свойство определяет разрешения, когда логика обработчика принимает исключительный захват или когда от него требуется одобрить захват или отмену захвата другим обработчиком.

Константа Описание
PointerHandler.TakeOverForbidden Этот обработчик не запрашивает и не предоставляет разрешения на захват для любого типа элементов или обработчиков.
PointerHandler.CanTakeOverFromHandlersOfSameType Этот обработчик может захватить исключительный захват от другого обработчика того же класса.
PointerHandler.CanTakeOverFromHandlersOfDifferentType Этот обработчик может захватить исключительный захват от любого типа обработчика.
PointerHandler.CanTakeOverFromAnything Этот обработчик может захватить исключительный захват от любого типа элемента или обработчика.
PointerHandler.ApprovesTakeOverByHandlersOfSameType Этот обработчик предоставляет разрешение другому обработчику того же класса на захват.
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType Этот обработчик предоставляет разрешение любому типу обработчика на захват.
PointerHandler.ApprovesTakeOverByItems Этот обработчик предоставляет разрешение любому типу элемента на захват.
PointerHandler.ApprovesCancellation Этот обработчик позволит установить захват в значение null.
PointerHandler.ApprovesTakeOverByAnything Этот обработчик предоставляет разрешение любому типу элемента или обработчика на захват.

Значение по умолчанию — PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything, которое разрешает большинство сценариев захвата, но предотвращает, например, конфликт между двумя PinchHandler за те же точки касания.

margin : real

Отступ за пределами границ элемента родитель, внутри которого точка события может активировать этот обработчик. Например, в PinchHandler, где target также является parent, полезно установить это значение как расстояние, по крайней мере, половину ширины типичного пальца пользователя, так что если parent был уменьшен до очень маленького размера, жест щипка все равно возможен. Или, если кнопка на основе TapHandler расположена рядом с краем экрана, ее можно использовать для соответствия закону Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально отстоит от края на несколько пикселей.

Значение по умолчанию равно 0.

maximumRotation : real

Максимальный допустимый угол вращения, который может быть применен к целевому объекту.

maximumScale : real

Максимальный допустимый коэффициент масштабирования, который может быть применен к целевому объекту.

minimumRotation : real

Минимальный допустимый угол вращения, который может быть применен к целевому объекту.

minimumScale : real

Минимальный допустимый коэффициент масштабирования, который может быть применен к целевому объекту.

[только для чтения] parent : Item

Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента, что означает, что событие указателя актуально, если хотя бы одна из его точек событий находится внутри элемента. Изначально target() является таким же, но его можно переназначить.

Примечание: Когда обработчик объявлен в объекте QtQuick3D.Model, родитель не является элементом Item, поэтому это свойство равно null.

См. также target и QObject::parent().

[только для чтения] rotation : real

Угол поворота жеста щипка в градусах, при этом положительные значения соответствуют по часовой стрелке. Он равен 0 при начале жеста. Если target не равен null, это значение автоматически будет применено к его rotation. В противном случае, для работы со значением можно использовать привязки.

[только для чтения] scale : real

Коэффициент масштаба, который будет автоматически установлен для целевого объекта, если он не равен null. В противном случае, для работы со значением можно использовать привязки. Пока выполняется жест щипка, он постоянно умножается на activeScale; после завершения жеста он остается неизменным; и когда начинается новый жест щипка, он снова начинает умножаться на activeScale.

target : Item

Элемент Item, которым будет управлять этот обработчик.

По умолчанию он совпадает с элементом родитель, элементом, в котором объявлен обработчик. Однако иногда бывает полезно установить целевой объект на другой элемент, чтобы обрабатывать события внутри одного элемента, но манипулировать другим; или чтобы null, чтобы отключить стандартное поведение и сделать что-то другое.

[только для чтения] translation : QVector2D

Смещение центра центра жеста. Оно равно (0, 0) при начале жеста.

xAxis.enabled : bool

xAxis управляет ограничениями для горизонтального смещения элемента целевого объекта.

minimum — минимальное допустимое значение координаты x смещения. maximum — максимальное допустимое значение координаты x смещения. Если enabled — true, то разрешено горизонтальное перетаскивание.

yAxis.enabled : bool

yAxis управляет ограничениями для вертикального смещения элемента целевого объекта.

minimum — минимальное допустимое значение координаты y смещения. maximum — максимальное допустимое значение координаты y смещения. Если enabled — true, то разрешено вертикальное перетаскивание.

Документация по сигналам

canceled(EventPoint point)

Если этот обработчик уже захватил заданную точку point, этот сигнал генерируется, когда захват украден другим обработчиком Pointer Handler или элементом.

Примечание: Соответствующий обработчик onCanceled.

grabChanged(GrabTransition transition, EventPoint point)

Этот сигнал излучается, когда захват изменился каким-либо образом, что актуально для этого обработчика.

Переход (глагол) указывает, что произошло. Точка (объект) — это точка, которая была захвачена или отжата.

Примечание: Соответствующий обработчик — onGrabChanged.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-pinchhandler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API