Тип QML PinchHandler
Обработчик жестов с двумя пальцами. Подробнее...
| Оператор импорта: | import QtQuick |
| Наследует: |
Свойства
- 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