Spec-Zone.ru › Qt 5.15

Тип QML WheelHandler

Обработчик колеса мыши. Подробнее...

Оператор импорта: import QtQuick 2.15
Наследуется от:

SinglePointHandler

  • Список всех членов, включая унаследованные

Свойства

  • acceptedButtons : flags
  • acceptedDevices : flags
  • acceptedModifiers : flags
  • acceptedPointerTypes : flags
  • active : bool
  • activeTimeout : real
  • cursorShape : Qt::CursorShape
  • dragThreshold : int
  • 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(EventPoint point)
  • grabChanged(GrabTransition transition, EventPoint point)
  • wheel(PointerScrollEvent 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

Это значение истинно, когда этот обработчик ввода полностью отвечает за обработку одного или нескольких EventPoint, успешно захватив исключительное управление этими точками. Это означает, что он сохраняет актуальность своих свойств в соответствии с перемещением этих точек Event и активно управляет своим target (если таковой имеется).

activeTimeout : real

Время в секундах, по истечении которого свойство active вернется к false, если больше не поступают события колеса. По умолчанию 0.1 (100 мс).

Когда WheelHandler обрабатывает события, содержащие информацию о фазе прокрутки, такие как события от некоторых тачпадов, свойство active станет false как только будет получено событие с фазой Qt::ScrollEnd; в этом случае таймаут не нужен. Но обычная мышь с колесом не предоставляет фазу прокрутки: мышь не может определить, когда пользователь решил прекратить прокрутку, поэтому свойство active переходит в false через указанное время.

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

Значение по умолчанию не задано, что позволяет отобразить курсор cursor родительского элемента. Это свойство можно сбросить до исходного состояния, задав ему значение undefined.

Примечание: Если это свойство не установлено или установлено в значение undefined, при чтении значения будет возвращено Qt.ArrowCursor.

Это свойство было добавлено в Qt 5.15.

См. также Qt::CursorShape, QQuickItem::cursor() и HoverHandler::cursorShape.

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 за те же точки касания.

invertible : bool

Обращать ли направление изменения свойства, если QQuickPointerScrollEvent::inverted равно true. По умолчанию true.

Если в операционной системе есть параметр "естественная прокрутка", который вызывает прокрутку в том же направлении, что и движение пальца, то если это свойство установлено в значение true, а WheelHandler непосредственно устанавливает свойство на target, направление движения будет соответствовать настройкам системы. Если это свойство установлено в false, оно инвертирует rotation, так что направление движения всегда совпадает с направлением движения пальца.

margin : real

Отступ за пределами границ родительского элемента parent, в пределах которого точка события может активировать этот обработчик. Например, в PinchHandler, где target также является parent, полезно установить это значение на расстояние, по крайней мере, вдвое превышающее ширину типичного пальца пользователя, чтобы в случае, если parent уменьшилась до очень маленького размера, жест pinch всё ещё был возможен. Или, если кнопка на основе TapHandler расположена около края экрана, это можно использовать для соблюдения закона Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально удалена от края на несколько пикселей.

Значение по умолчанию 0.

orientation : enum

Какое колесо обрабатывать. По умолчанию Qt.Vertical.

Не у каждой мыши есть колесо Horizontal; иногда оно эмулируется наклоном колеса вбок. Тачпад обычно может генерировать вертикальные и горизонтальные события колеса.

[только для чтения] parent : Item

Элемент Item, который является областью действия обработчика; элемент, в котором он был объявлен. Обработчик будет обрабатывать события от имени этого элемента, что означает, что событие указателя актуально, если хотя бы одна из его точек событий находится внутри элемента. Изначально target() такой же, но его можно переназначить.

См. также target и QObject::parent().

[только для чтения] point : HandlerPoint

Точка события, которая в настоящее время обрабатывается. Когда никакая точка не обрабатывается, этот объект сбрасывается до значений по умолчанию (все координаты равны 0).

property : string

Свойство, которое должно быть изменено на target при вращении колеса мыши.

По умолчанию нет свойства (пустая строка). Когда целевое свойство не изменяется автоматически, вы можете использовать привязки для реакции на вращение колеса мыши произвольным образом.

Вы можете использовать колесо мыши для изменения любого числового свойства. Например, если property установлено в x, target будет перемещаться по горизонтали при вращении колеса. Следующие свойства имеют специальное поведение:

Константа Описание
scale scale будет изменяться нелинейно, как описано в targetScaleMultiplier. Если targetTransformAroundCursor равно true, свойства x и y будут одновременно изменены, так что пользователь фактически будет приближаться или отдаляться от точки под курсором мыши.
rotation rotation будет установлен в значение rotation. Если targetTransformAroundCursor равно true, свойства {QQuickItem::x}{x} и y будут одновременно изменены, так что пользователь фактически будет вращать элемент вокруг точки под курсором мыши.

Изменение заданного свойства целевого объекта всегда масштабируется с помощью rotationScale.

rotation : real

Угол, на который колесо мыши повернулось с момента последнего изменения этого свойства, в градусах.

Положительное значение указывает, что колесо было повернуто вверх/вправо; отрицательное значение указывает, что колесо было повернуто вниз/влево.

Базовая кнопка мыши с колесом работает шагами по 15 градусов.

Значение по умолчанию 0 при запуске. Его можно программно изменить на любое значение в любое время. Значение будет корректироваться по мере вращения колеса мыши.

См. также orientation.

rotationScale : real

Масштабирование, применяемое к свойству rotation, и к свойству property элемента target, если таковой имеется. Значение по умолчанию равно 1, так что свойство rotation будет в единицах градусов поворота. Оно может быть задано отрицательным числом для инвертирования эффекта от направления вращения колесика мыши.

target : Item

Элемент Item, который будет манипулироваться этим обработчиком.

По умолчанию, он такой же, как и parent, т.е. элемент Item, в котором объявлен обработчик. Однако, иногда бывает полезно установить target на другой элемент 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(EventPoint point)

Если этот обработчик уже захватил указанную точку point, этот сигнал отправляется, когда захват захватывается другим обработчиком Pointer Handler или элементом Item.

Примечание: Соответствующий обработчик — onCanceled.

grabChanged(GrabTransition transition, EventPoint point)

Этот сигнал отправляется, когда захват изменился каким-либо образом, что имеет отношение к этому обработчику.

transition (глагол) указывает, что произошло. point (объект) — это точка, которая была захвачена или освобождена.

Примечание: Соответствующий обработчик — onGrabChanged.

wheel(PointerScrollEvent event)

Этот сигнал отправляется каждый раз, когда этот обработчик получает событие QWheelEvent: то есть, каждый раз, когда колесико перемещается или изменяется жести действия прокрутки.

Примечание: Соответствующий обработчик — onWheel.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qml-qtquick-wheelhandler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API