Тип QML PinchHandler
Обработчик жестов pinch. Подробнее...
| Заявление об импорте: | import QtQuick 2.0 |
| Наследует: |
Свойства
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- 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
- minimumTouchPoints : int
- 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 Item вместо этого:
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) + "%"
}
} См. также PinchArea.
Документация по свойствам
acceptedButtons : flags
Кнопки мыши, которые могут активировать этот обработчик Pointer Handler.
По умолчанию это свойство установлено в Qt.LeftButton. Его можно установить в комбинацию кнопок мыши, и он будет игнорировать события от других кнопок.
Например, элемент управления может реагировать на левые и правые щелчки по-разному, с помощью двух обработчиков:
Item {
TapHandler {
onTapped: console.log("left clicked")
}
TapHandler {
acceptedButtons: Qt.RightButton
onTapped: console.log("right clicked")
}
} Примечание: Нажатие на сенсорном экране или нажатие стилусом на графическом планшете имитирует щелчок левой кнопкой мыши. Это поведение можно изменить с помощью acceptedDevices или acceptedPointerTypes.
acceptedDevices : flags
Типы указательных устройств, которые могут активировать этот обработчик Pointer Handler.
По умолчанию это свойство установлено в 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
Типы указательных инструментов (палец, стилус, ластик и т. д.), которые могут активировать этот обработчик Pointer Handler.
По умолчанию это свойство установлено в 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
Это значение истинно, когда этот обработчик ввода взял на себя полную ответственность за обработку одного или нескольких EventPoints, успешно захватив исключительный доступ к этим точкам. Это означает, что он обновляет свои свойства в соответствии с перемещениями этих точек Event и активно манипулирует своим target (если таковой имеется).
active : bool
Это свойство истинно, когда все ограничения (особенно minimumTouchPoints) удовлетворены, и target, если он есть, манипулируется.
[только чтение] activeScale : real
Коэффициент масштабирования во время выполнения жеста pinch. Он равен 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, что позволяет большинству сценариев захвата, но избегает, например, конфликтов между двумя PinchHandlers за одни и те же точки касания.
margin : real
Отступ за пределами границ элемента родитель, в пределах которого точка события может активировать этот обработчик. Например, в PinchHandler, где target также является parent, полезно установить это значение на расстояние, по крайней мере, половину ширины типичного пальца пользователя, чтобы, если parent уменьшен до очень малого размера, жест щипка всё ещё был возможен. Или, если кнопка на основе TapHandler размещена возле края экрана, её можно использовать для соответствия закону Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально смещена от края на несколько пикселей.
Значение по умолчанию равно 0.
maximumRotation : real
Максимальный допустимый угол поворота, который можно применить к целевому объекту.
maximumScale : real
Максимальное допустимое значение масштаба, которое можно применить к целевому объекту.
minimumRotation : real
Минимальный допустимый угол поворота, который можно применить к целевому объекту.
minimumScale : real
Минимальное допустимое значение масштаба, которое можно применить к целевому объекту.
minimumTouchPoints : int
Жест щипка начинается, когда количество нажатых пальцев достигает этого значения. До этого момента PinchHandler отслеживает положение всех нажатых пальцев, но если их недостаточно, он не изменяет масштаб или поворот целевого объекта, и свойство active останется ложным.
[только для чтения] parent : Item
Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента, что означает, что событие указателя актуально, если хотя бы одна из его точек события находится внутри области элемента. Изначально target() такой же, но его можно переназначить.
См. также target и QObject::parent().
[только для чтения] rotation : real
Поворот жеста щипка в градусах, положительные значения соответствуют по часовой стрелке. Равен 0 в начале жеста. Если target не равен null, этот поворот будет автоматически применён к свойству rotation. В противном случае, можно использовать привязки для выполнения произвольных действий с этим значением.
[только для чтения] scale : real
Коэффициент масштабирования, который будет автоматически применён к target, если он не равен null. В противном случае можно использовать привязки для выполнения произвольных действий с этим значением. Во время выполнения жеста щипка он непрерывно умножается на activeScale. После завершения жеста он остаётся неизменным; а в начале нового жеста щипка он снова начинает умножаться на activeScale.
target : Item
Элемент Item, которым будет управлять этот обработчик.
По умолчанию, он такой же, как parent, элемент, в котором объявлен обработчик. Однако, иногда бывает полезно установить целевой элемент на другой элемент, чтобы обрабатывать события в одном элементе, но управлять другим; или чтобы null, чтобы отключить поведение по умолчанию и сделать что-то другое вместо этого.
[только для чтения] translation : QVector2D
Сдвиг центра жеста centroid. Он равен (0, 0) в начале жеста.
xAxis.enabled : bool
xAxis управляет ограничениями для горизонтального перемещения элемента target.
minimum — минимальная допустимая координата x смещения. maximum — максимальная допустимая координата x смещения. Если enabled истинно, то разрешено горизонтальное перетаскивание.
yAxis.enabled : bool
yAxis управляет ограничениями для вертикального перемещения элемента target.
minimum — минимальная допустимая координата y смещения. maximum — максимальная допустимая координата y смещения. Если enabled истинно, то разрешено вертикальное перетаскивание.
Документация по сигналам
canceled(EventPoint point)
Если этот обработчик уже захватил данную точку point, этот сигнал испускается, когда захват украден другим обработчиком указателя или элементом.
Примечание: Соответствующий обработчик — onCanceled.
grabChanged(GrabTransition transition, EventPoint point)
Этот сигнал излучается, когда захват (grab) изменился каким-либо образом, что актуально для этого обработчика.
transition (глагол) показывает, что произошло. point (объект) — это точка, которая была захвачена или отжата.
Примечание: Соответствующий обработчик — onGrabChanged.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qml-qtquick-pinchhandler.html