Spec-Zone.ru › Qt 6.1

Тип PinchHandler QML

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

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

MultiPointHandler

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

Свойства

  • acceptedButtons : flags
  • acceptedDevices : flags
  • acceptedModifiers : flags
  • acceptedPointerTypes : flags
  • 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 вместо этого:

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

Кнопки мыши, которые могут активировать этот обработчик указателя.

По умолчанию это свойство установлено в 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, когда все ограничения (особенно minimumTouchPoints) удовлетворены и элемент target, если он существует, находится в процессе манипулирования.

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

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

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

Точка, находящаяся точно посередине нажатых точек касания. Элемент 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

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

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

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

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

[since 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

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

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

maximumRotation : real

Максимально допустимый угол поворота для применения к элементу target.

maximumScale : real

Максимально допустимый масштаб для применения к элементу target.

minimumRotation : real

Минимально допустимый угол поворота для применения к элементу target.

minimumScale : real

Минимально допустимый масштаб для применения к элементу target.

minimumTouchPoints : int

Щипок начинается, когда количество нажатых пальцев достигает этого числа. До тех пор PinchHandler отслеживает позиции всех нажатых пальцев, но если их недостаточно, он не масштабирует и не вращает свой target, и свойство 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 — 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-6.1/qml-qtquick-pinchhandler.html

Spec-Zone.ru

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