Spec-Zone.ru › Qt 6.0

Тип QML PinchHandler

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

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

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

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

active : bool

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

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

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

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

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

[с 5.15] 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

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

margin : real

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

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

maximumRotation : real

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

maximumScale : real

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

minimumRotation : real

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

minimumScale : real

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

minimumTouchPoints : int

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

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

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

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

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

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

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

yAxis.enabled : bool

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

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

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

canceled(EventPoint point)

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

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

grabChanged(GrabTransition transition, EventPoint point)

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

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

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

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

Spec-Zone.ru

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