Тип QML PinchHandler
Обработчик жестов pinch. Подробнее...
| Заявление об импорте: | import QtQuick 2.14 |
| Наследует: |
Свойства
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- active : bool
- activeScale : real
- centroid : QtQuick::HandlerPoint
- 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(point)
- grabChanged(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 Point и активно манипулирует своим target (если есть).
active : bool
Это свойство истинно, когда все ограничения (особенно minimumTouchPoints) выполнены, и target, если таковой имеется, обрабатывается.
[только для чтения] activeScale : real
Коэффициент масштабирования во время выполнения жеста pinch. Он равен 1,0 в начале жеста, увеличивается при раздвижении точек касания и уменьшается при сближении точек касания. Если target не равен null, его scale будет автоматически умножен на это значение. В противном случае привязки могут использоваться для выполнения произвольных действий с этим значением.
[только для чтения] centroid : QtQuick::HandlerPoint
Точка, расположенная точно посередине между текущими точками касания. target будет поворачиваться вокруг этой точки.
enabled : bool
Если PointerHandler отключён, он будет отклонять все события, и не будет генерироваться никаких сигналов.
grabPermissions : flags
Это свойство определяет разрешения, когда логика данного обработчика принимает эксклюзивное захват или когда его просят одобрить захват или отмену захвата другим обработчиком.
| Константа | Описание |
|---|---|
PointerHandler.TakeOverForbidden |
Этот обработчик не захватывает и не предоставляет разрешение на захват для любого типа элемента Item или обработчика Handler. |
PointerHandler.CanTakeOverFromHandlersOfSameType |
Этот обработчик может захватить эксклюзивный захват от другого обработчика того же класса. |
PointerHandler.CanTakeOverFromHandlersOfDifferentType |
Этот обработчик может захватить эксклюзивный захват от любого типа обработчика. |
PointerHandler.CanTakeOverFromAnything |
Этот обработчик может захватить эксклюзивный захват от любого типа элемента Item или обработчика Handler. |
PointerHandler.ApprovesTakeOverByHandlersOfSameType |
Этот обработчик даёт разрешение другому обработчику того же класса захватить захват. |
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType |
Этот обработчик даёт разрешение любому типу обработчика захватить захват. |
PointerHandler.ApprovesTakeOverByItems |
Этот обработчик даёт разрешение любому типу элемента Item захватить захват. |
PointerHandler.ApprovesCancellation |
Этот обработчик позволит установить его захват в значение null. |
PointerHandler.ApprovesTakeOverByAnything |
Этот обработчик предоставляет разрешение любому типу элемента Item или обработчика Handler захватить захват. |
По умолчанию PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything, что позволяет большинству сценариев захвата, но избегает, например, конфликтов между двумя PinchHandler за одними и теми же точками касания.
margin : real
Отступ за пределами границ элемента parent, в пределах которого точка события может активировать этот обработчик. Например, на PinchHandler, где target также является parent, полезно установить это значение на расстояние, по крайней мере, вдвое превышающее ширину типичного пальца пользователя, чтобы если parent был уменьшен до очень маленького размера, жест щипка всё ещё был возможен. Или, если кнопка на основе TapHandler расположена рядом с краем экрана, её можно использовать для соблюдения закона Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально удалена от края на несколько пикселей.
Значение по умолчанию равно 0.
maximumRotation : real
Максимально допустимый угол поворота rotation, который может быть применён к target.
maximumScale : real
Максимально допустимый коэффициент масштабирования scale, который может быть применён к target.
minimumRotation : real
Минимально допустимый угол поворота rotation, который может быть применён к target.
minimumScale : real
Минимально допустимый коэффициент масштабирования scale, который может быть применён к target.
minimumTouchPoints : int
Жест щипка начинается, когда количество нажатых пальцев достигает этого значения. До этого момента PinchHandler отслеживает позиции нажатых пальцев, но если их недостаточно, не масштабирует и не поворачивает target, а свойство active остаётся ложным.
[только для чтения] parent : Item
Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента Item, что означает, что событие указателя актуально, если хотя бы одна из его точек события находится внутри внутренней области элемента Item. Изначально target() совпадает, но его можно переназначить.
См. также target и QObject::parent().
[только для чтения] rotation : real
Угол поворота жеста щипка в градусах, при положительных значениях по часовой стрелке. Он равен 0 при начале жеста. Если target не равен null, этот угол автоматически применяется к rotation. В противном случае, можно использовать привязки для выполнения произвольных действий с этим значением.
[только для чтения] scale : real
Коэффициент масштабирования, который будет автоматически установлен для target, если он не равен null. В противном случае можно использовать привязки для выполнения произвольных действий со значением. Во время выполнения жеста щипка он постоянно умножается на activeScale; после окончания жеста он остаётся неизменным; и при начале следующего жеста щипка он снова начинает умножаться на activeScale.
target : Item
Элемент Item, которым будет манипулировать этот обработчик.
По умолчанию он совпадает с parent, элементом Item, в котором объявлен обработчик. Однако иногда полезно установить target на другой элемент Item, чтобы обрабатывать события в одном элементе, но манипулировать другим; или null, чтобы отключить стандартное поведение и выполнить что-то другое вместо этого.
[только для чтения] translation : QVector2D
Сдвиг центра centroid жеста. Он равен (0, 0) при начале жеста.
xAxis.enabled : bool
xAxis управляет ограничениями для горизонтального перемещения элемента target.
minimum — минимально допустимая координата x смещения. maximum — максимально допустимая координата x смещения. Если enabled — true, разрешается горизонтальное перетаскивание.
yAxis.enabled : bool
yAxis управляет ограничениями для вертикального перемещения элемента target.
minimum — минимально допустимая координата y смещения. maximum — максимально допустимая координата y смещения. Если enabled — true, разрешается вертикальное перетаскивание.
Документация по сигналам
canceled(point)
Если этот обработчик уже захватил указанную точку point, этот сигнал испускается, когда захват захватывается другим обработчиком Pointer Handler или Item.
grabChanged(transition, EventPoint point)
Этот сигнал испускается, когда захват изменился каким-либо образом, который важен для этого обработчика.
transition (глагол) указывает, что произошло. point (объект) — это точка, которая была захвачена или освобождена.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtquick-pinchhandler.html