Тип QML PointerDeviceHandler
Абстрактный обработчик событий указателя с ограничениями, специфичными для устройства. Подробнее...
| Заявление об импорте: | import QtQuick 2.1 |
| С: | Qt 5.10 |
| Наследует: | |
| Наследуется от: |
Свойства
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- cursorShape : Qt::CursorShape
- dragThreshold : int
- enabled : bool
- grabPermissions : flags
- margin : real
- parent : Item
- target : Item
Сигналы
- canceled(EventPoint point)
- grabChanged(GrabTransition transition, EventPoint point)
Подробное описание
Промежуточный класс (не зарегистрированный как тип QML) для обработчиков, которые позволяют фильтрацию по типу устройства, типу указателя или модификаторам клавиатуры.
Документация по свойствам
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 с помощью аргумента командной строки). Клавиша Mode_switch на клавиатуре должна быть нажата. |
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, когда этот обработчик ввода взял на себя полную ответственность за обработку одного или нескольких EventPoints, успешно захватив эксклюзивный захват этих точек. Это означает, что он сохраняет свои свойства в актуальном состоянии в соответствии с перемещениями этих точек Event и активно манипулирует своим target (если таковой имеется).
[с 5.15] cursorShape : Qt::CursorShape
Это свойство содержит форму курсора, которая будет отображаться всякий раз, когда указатель мыши находится над элементом parent, а 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
Значение по умолчанию не установлено, что позволяет отображаться курсору cursor элемента parent. Это свойство можно сбросить до первоначального состояния, установив его в 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
Поле за пределами границ родительского элемента parent, в пределах которого точка события может активировать этот обработчик. Например, на PinchHandler, где target также является parent, полезно установить это значение на расстояние, по меньшей мере, половины ширины типичного пальца пользователя, чтобы даже если parent был уменьшен до очень малого размера, жесты pinch всё ещё работали. Или, если кнопка на основе TapHandler расположена близко к краю экрана, она может использоваться для соответствия закону Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально смещена от края на несколько пикселей.
Значение по умолчанию равно 0.
[только для чтения] parent : Item
Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента, что означает, что событие указателя актуально, если хотя бы одна из его точек события находится внутри внутренности элемента. Изначально target() такое же, но его можно переназначить.
См. также target и QObject::parent().
target : Item
Элемент Item, который будет манипулировать этим обработчиком.
По умолчанию он такой же, как parent, элемент, в котором объявлен обработчик. Однако иногда бывает полезно установить target на другой элемент, чтобы обрабатывать события внутри одного элемента, но манипулировать другим; или чтобы null, чтобы отключить стандартное поведение и сделать что-то другое вместо этого.
Документация по сигналам
canceled(EventPoint point)
Если этот обработчик уже захватил заданную точку point, этот сигнал излучается, когда захват захватывается другим обработчиком указателя или элементом.
Примечание: Соответствующий обработчик - onCanceled.
grabChanged(GrabTransition transition, EventPoint point)
Этот сигнал излучается, когда захват изменился каким-либо образом, имеющим отношение к этому обработчику.
transition (глагол) указывает, что произошло. point (объект) — это точка, которая была захвачена или отпущена.
Примечание: Соответствующий обработчик - onGrabChanged.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qml-qtquick-pointerdevicehandler.html