Тип QML WheelHandler
Обработчик колеса мыши. Подробнее...
| Заявление об импорте: | import QtQuick 2.14 |
| Наследует: |
Свойства
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- activeTimeout : real
- enabled : bool
- grabPermissions : flags
- invertible : bool
- margin : real
- orientation : перечисление
- parent : Item
- point : HandlerPoint
- property : string
- rotation : real
- rotationScale : real
- target : Item
- targetScaleMultiplier : real
- targetTransformAroundCursor : bool
Сигналы
- canceled(point)
- grabChanged(transition, EventPoint point)
- wheel(event)
Подробное описание
WheelHandler — это обработчик, который используется для интерактивного изменения числового свойства элемента Item при вращении колесом мыши. Как и другие обработчики ввода, по умолчанию он манипулирует своим свойством target. Объявите property, чтобы контролировать, какое свойство целевого объекта будет изменяться:
import QtQuick 2.14
Rectangle {
width: 170; height: 120
color: "green"; antialiasing: true
WheelHandler {
property: "rotation"
onWheel: console.log("rotation", event.angleDelta.y,
"scaled", rotation, "@", point.position, "=>", parent.rotation)
}
} BoundaryRule очень полезен в сочетании с WheelHandler (а также с другими обработчиками ввода), чтобы объявить допустимый диапазон значений, которые может принимать свойство целевого объекта. Например, можно реализовать прокрутку, используя комбинацию WheelHandler и DragHandler для манипулирования свойством y прокручиваемого элемента Item, когда пользователь вращает колесо или перетаскивает элемент на сенсорном экране, и BoundaryRule для ограничения диапазона движения сверху вниз:
import QtQuick 2.14
import Qt.labs.animation 1.0
Item {
width: 320; height: 480
Flow {
id: content
width: parent.width
spacing: 2; padding: 2
WheelHandler {
orientation: Qt.Vertical
property: "y"
rotationScale: 15
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onActiveChanged: if (!active) ybr.returnToBounds()
}
DragHandler {
xAxis.enabled: false
onActiveChanged: if (!active) ybr.returnToBounds()
}
BoundaryRule on y {
id: ybr
minimum: content.parent.height - content.height
maximum: 0
minimumOvershoot: 400; maximumOvershoot: 400
overshootFilter: BoundaryRule.Peak
}
Repeater {
model: 1000
Rectangle { color: "gray"; width: 10 + Math.random() * 100; height: 15 }
}
}
} В противном случае, если property не задано или target равно null, WheelHandler не будет автоматически изменять ничего; но свойство rotation можно использовать в привязке для изменения другого свойства, или вы можете реализовать onWheel и обработать событие колеса напрямую.
WheelHandler по умолчанию обрабатывает только вращающееся колесо мыши. При необходимости он может обрабатывать события плавной прокрутки от жестов на тачпаде, установив acceptedDevices на PointerDevice.Mouse | PointerDevice.TouchPad.
Примечание: Некоторые устройства без мыши (например, сенсорная Wacom-планшет или тачпад ноутбука Linux) генерируют реальные события колеса из жестов. WheelHandler будет реагировать на эти события как на события колеса независимо от настроек свойства acceptedDevices.
См. также MouseArea и Flickable.
Документация по свойствам
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
Это значение истинно всякий раз, когда этот обработчик ввода берет на себя полную ответственность за обработку одного или нескольких EventPoints, успешно захватив эксклюзивный захват этих точек. Это означает, что он сохраняет свои свойства, обновляемые в соответствии с движениями этих Event Points, и активно управляет своим объектом target (если таковой имеется).
activeTimeout : real
Время в секундах, по истечении которого свойство active вернется к false если больше нет событий колеса. По умолчанию 0.1 (100 мс).
Когда WheelHandler обрабатывает события, содержащие информацию о фазе прокрутки, такие как события от некоторых тачпадов, свойство active станет false как только будет получено событие с фазой Qt::ScrollEnd; в этом случае таймаут не нужен. Но обычная мышь с колесом не предоставляет фазу прокрутки: мышь не может определить, когда пользователь решил прекратить прокрутку, поэтому свойство active перейдет в false по истечении этого времени.
enabled : bool
Если обработчик PointerHandler отключён, он будет отклонять все события, и никакие сигналы не будут излучаться.
grabPermissions : флаги
Это свойство определяет разрешения, когда логика этого обработчика принимает на себя эксклюзивный захват или когда его просят одобрить захват или отмену захвата другим обработчиком.
| Константа | Описание |
|---|---|
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 за одни и те же точки касания.
invertible : bool
Определяет, будет ли обращено направление изменения свойства, если QQuickPointerScrollEvent::inverted имеет значение true. По умолчанию true.
Если операционная система имеет настройку «естественного прокручивания», которая приводит к прокрутке в том же направлении, что и движение пальца, то если это свойство установлено в true, и WheelHandler непосредственно устанавливает свойство на target, направление движения будет соответствовать настройкам системы. Если это свойство установлено в false, оно инвертирует rotation, чтобы направление движения всегда соответствовало направлению движения пальца.
margin : real
Поле от границ элемента parent, в пределах которого точка события может активировать этот обработчик. Например, в PinchHandler, где target также является parent, полезно установить это значение на расстояние, по крайней мере, в половину ширины типичного пальца пользователя, чтобы в случае, если parent было уменьшено до очень маленького размера, жесты pinch по-прежнему были возможны. Или, если кнопка на основе TapHandler размещена рядом с краем экрана, она может быть использована для соответствия закону Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально удалена от края на несколько пикселей.
Значение по умолчанию равно 0.
orientation : перечисление
Какое колесо реагировать на. По умолчанию Qt.Vertical.
Не у каждой мыши есть колесо Horizontal; иногда оно эмулируется наклоном колеса вбок. Тачпад обычно может генерировать как вертикальные, так и горизонтальные события колеса.
[только для чтения] parent : Item
Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента, что означает, что событие указателя актуально, если хотя бы одна из его точек события находится внутри внутренней области элемента. Изначально target() такой же, но его можно переназначить.
См. также target и QObject::parent().
[только для чтения] point : HandlerPoint
Точка события, которая в данный момент обрабатывается. Когда никакая точка не обрабатывается, этот объект сбрасывается до значений по умолчанию (все координаты равны 0).
property : строка
Свойство, которое нужно изменить в элементе target при вращении колеса мыши.
По умолчанию свойство не задано (пустая строка). Когда свойство элемента-мишени не изменяется автоматически, вы можете использовать привязки для реагирования на вращение колеса мыши произвольными способами.
Вы можете использовать колесо мыши для изменения любого числового свойства. Например, если property установлено на x, элемент target будет перемещаться горизонтально при вращении колеса. Следующие свойства имеют специальное поведение:
| Константа | Описание |
|---|---|
scale |
scale будет изменяться нелинейно, как описано в targetScaleMultiplier. Если targetTransformAroundCursor равно true, свойства x и y будут одновременно корректироваться таким образом, чтобы пользователь мог эффективно приближаться или удаляться от точки под курсором мыши. |
rotation |
rotation будет установлено в rotation. Если targetTransformAroundCursor равно true, свойства x и y будут одновременно корректироваться таким образом, чтобы пользователь мог эффективно вращать элемент вокруг точки под курсором мыши. |
Корректировка заданного свойства целевого элемента всегда масштабируется с помощью rotationScale.
rotation : real
Угол, на который колесо мыши было повернуто с момента последнего установления этого свойства, в градусах колеса.
Положительное значение указывает, что колесо было повернуто вверх/вправо; отрицательное значение указывает, что колесо было повернуто вниз/влево.
Базовое колесо мыши работает шагами по 15 градусов.
Значение по умолчанию равно 0 при запуске. Его можно программно установить на любое значение в любое время. Значение будет изменяться оттуда по мере вращения колеса мыши пользователем.
См. также orientation.
rotationScale : real
Масштабирование, применяемое к свойству rotation и к свойству property элемента target, если таковое имеется. Значение по умолчанию равно 1, таким образом, rotation будет в единицах градусов поворота. Его можно установить в отрицательное число, чтобы инвертировать эффект направления вращения колеса мыши.
target : Item
Элемент Item, который будет манипулировать этот обработчик.
По умолчанию он совпадает с parent, элементом Item, в котором объявлен обработчик. Однако иногда бывает полезно установить целевой элемент на другой элемент, чтобы обрабатывать события в одном элементе, но манипулировать другим; или для null, чтобы отключить стандартное поведение и сделать что-то другое вместо этого.
targetScaleMultiplier : real
Величина, на которую масштабируется scale элемента target всякий раз, когда rotation изменяется на 15 градусов. Это актуально только тогда, когда property равно "scale".
scale будет умножено на targetScaleMultiplier angleDelta * rotationScale / 15. По умолчанию это 2 1/3, что означает, что если rotationScale оставлена по умолчанию, и колесо мыши повернуто на один «щелчок» (15 градусов), элемент target будет отмасштабирован примерно на 1,25; после трёх «щелчков» его размер удвоится или уменьшится вдвое, в зависимости от направления вращения колеса. Если вы хотите удваивать или уменьшать вдвое с каждыми 2 щелчками колеса, установите это в 2 1/2 (1,4142). Если вы хотите отмасштабировать в противоположном направлении вращения колеса, установите rotationScale в отрицательное значение.
targetTransformAroundCursor : bool
Определяет, следует ли автоматически перепозиционировать элемент target таким образом, чтобы он трансформировался вокруг позиции курсора мыши во время изменения свойства property. Значение по умолчанию true.
Если свойство property установлено в "rotation" и targetTransformAroundCursor равно true, то при вращении колеса элемент target будет вращаться на месте вокруг позиции курсора мыши. Если targetTransformAroundCursor равно false, он будет вращаться вокруг его transformOrigin вместо этого.
Документация сигналов
canceled(point)
Если этот обработчик уже захватил указанную точку point, этот сигнал испускается, когда захват отнимается другим обработчиком указателя или элементом.
grabChanged(transition, EventPoint point)
Этот сигнал испускается, когда захват изменился каким-либо образом, относящимся к этому обработчику.
transition (глагол) указывает, что произошло. point (объект) — это точка, которая была захвачена или освобождена.
wheel(event)
Этот сигнал испускается каждый раз, когда этот обработчик получает событие QWheelEvent: то есть каждый раз, когда колесо перемещается или обновляется жест прокрутки.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtquick-wheelhandler.html