Spec-Zone.ru › Qt 5.15

Тип PinchHandler QML

Обработчик жестов pinch. Подробнее...

Заявление об импорте: import QtQuick 2.15
Наследует:

MultiPointHandler

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

Свойства

  • 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

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

active : bool

Это свойство истинно, когда все ограничения (особенно minimumTouchPoints) удовлетворены, и target (если таковой имеется) обрабатывается.

[только для чтения] activeScale : real

Коэффициент масштабирования во время выполнения жеста pinch. Он равен 1,0 при начале жеста, увеличивается, когда точки касания раздвигаются, и уменьшается, когда точки касания сближаются. Если target не равен null, его scale будет автоматически умножен на это значение. В противном случае, привязки могут использоваться для выполнения произвольных действий с этим значением.

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

Точка, точно расположенная посередине текущих нажатых точек касания. Целевой объект будет вращаться вокруг этой точки.

cursorShape : Qt::CursorShape

Это свойство содержит форму курсора, которая будет отображаться всякий раз, когда мышь находится над родительским элементом, в то время как активный параметр 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

Значение по умолчанию не задано, что позволяет отобразить курсор parentItem. Это свойство можно сбросить до исходного состояния, установив его значение в 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, что позволяет большинству сценариев захвата, но избегает, например, конфликта между двумя PinchHandler за одни и те же точки касания.

margin : real

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

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

maximumRotation : real

Максимальное допустимое вращение, которое должно быть применено к целевому объекту.

maximumScale : real

Максимальный допустимый масштаб, который должен быть применён к целевому объекту.

minimumRotation : real

Минимальное допустимое вращение, которое должно быть применено к целевому объекту.

minimumScale : real

Минимальный допустимый масштаб, который должен быть применён к целевому объекту.

minimumTouchPoints : int

Щипок начинается, когда нажато указанное количество пальцев. До этого PinchHandler отслеживает позиции нажатых пальцев, но если их недостаточно, он не масштабирует и не вращает свой target, и свойство active останется false.

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

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

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

[только для чтения] rotation : real

Вращение жеста щипка в градусах, положительные значения соответствуют вращению по часовой стрелке. Оно равно 0 при начале жеста. Если target не равен null, это значение будет автоматически применено к его вращению. В противном случае можно использовать привязки для выполнения произвольных действий с этим значением.

[только для чтения] 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 равно true, разрешено горизонтальное перетаскивание.

yAxis.enabled : bool

yAxis управляет ограничениями для вертикального перемещения элемента target.

minimum — минимальное допустимое значение y координаты смещения. maximum — максимальное допустимое значение y координаты смещения. Если enabled равно true, разрешено вертикальное перетаскивание.

Документация сигналов

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-5.15/qml-qtquick-pinchhandler.html

Spec-Zone.ru

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