Spec-Zone.ru › Qt 5.14

Тип QML DragHandler

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

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

MultiPointHandler

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

Свойства

  • acceptedButtons : флаги
  • acceptedDevices : флаги
  • acceptedModifiers : флаги
  • acceptedPointerTypes : флаги
  • active : bool
  • enabled : bool
  • grabPermissions : флаги
  • margin : вещественное число
  • parent : Item
  • target : Item
  • translation : QVector2D
  • xAxis
    • xAxis.enabled : bool
    • xAxis.maximum : вещественное число
    • xAxis.minimum : вещественное число
  • yAxis
    • yAxis.enabled : bool
    • yAxis.maximum : вещественное число
    • yAxis.minimum : вещественное число

Сигналы

  • canceled(point)
  • grabChanged(transition, EventPoint point)

Подробное описание

DragHandler — это обработчик, используемый для интерактивного перемещения элемента Item. Как и другие обработчики ввода, по умолчанию он полностью функционален и управляет своим свойством target.

import QtQuick 2.12

Rectangle {
    width: 100
    height: 100
    color: "lightsteelblue"
    DragHandler { }
}

Он имеет свойства для ограничения диапазона перетаскивания.

Если он объявлен внутри одного элемента Item, но ему назначен другой target, тогда он обрабатывает события в пределах границ элемента parent, но управляет элементом target вместо него:

import QtQuick 2.12

Item {
    width: 640
    height: 480

    Rectangle {
        id: feedback
        border.color: "red"
        width: Math.max(10, handler.centroid.ellipseDiameters.width)
        height: Math.max(10, handler.centroid.ellipseDiameters.height)
        radius: Math.max(width, height) / 2
        visible: handler.active
    }

    DragHandler {
        id: handler
        target: feedback
    }
}

Третий способ использования — установить target в null и реагировать на изменения свойств каким-либо другим способом:

import QtQuick 2.12

Item {
    width: 640
    height: 480

    DragHandler {
        id: handler
        target: null
    }

    Text {
        color: handler.active ? "darkgreen" : "black"
        text: handler.centroid.position.x.toFixed(1) + "," + handler.centroid.position.y.toFixed(1)
        x: handler.centroid.position.x - width / 2
        y: handler.centroid.position.y - height
    }
}

Если minimumPointCount и maximumPointCount установлены в значения, большие 1, пользователю необходимо перетащить столько пальцев в одном направлении, чтобы начать перетаскивание. Жест перетаскивания с несколькими пальцами может быть обнаружен независимо от (по умолчанию) обработчика DragHandler с одним пальцем и обработчика PinchHandler на том же элементе Item, и таким образом может быть использован для настройки какой-либо другой функции независимо от обычного поведения pinch: например, для настройки преобразования наклона или настройки какого-либо другого числового значения, если target установлено в null. Но если target является элементом Item, centroid — это точка, в которой начинается перетаскивание, и в которую будет перемещен target (с учетом ограничений).

В настоящее время перетаскивание и перемещение не поддерживаются.

См. также Drag и MouseArea.

Документация по свойствам

acceptedButtons : флаги

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

По умолчанию это свойство установлено в Qt.LeftButton. Оно может быть установлено в комбинацию кнопок мыши, и будет игнорировать события от других кнопок.

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

Item {
    TapHandler {
        onTapped: console.log("left clicked")
    }
    TapHandler {
        acceptedButtons: Qt.RightButton
        onTapped: console.log("right clicked")
    }
}

Примечание: Нажатие на сенсорном экране или нажатие стилусом на графическом планшете имитирует щелчок левой кнопкой мыши. Это поведение может быть изменено с помощью acceptedDevices или acceptedPointerTypes.

acceptedDevices : флаги

Типы указывающих устройств, которые могут активировать этот обработчик Pointer Handler.

По умолчанию это свойство установлено в PointerDevice.AllDevices. Если вы установите его в комбинацию типов устройств, он будет игнорировать события от несоответствующих устройств.

Например, элемент управления может реагировать на щелчки мышью и стилусом одним способом, а на касания на сенсорном экране — другим способом, с двумя обработчиками:

Item {
   TapHandler {
       acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus
       onTapped: console.log("clicked")
   }
   TapHandler {
       acceptedDevices: PointerDevice.TouchScreen
       onTapped: console.log("tapped")
   }
}

acceptedModifiers : флаги

Если это свойство установлено, оно потребует нажатия указанных клавиш модификаторов для реакции на события указателя, а в противном случае проигнорирует их.

Если это свойство установлено в 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 : флаги

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

enabled : bool

Если обработчик PointerHandler отключен, он отклонит все события, и никакие сигналы не будут испущены.

grabPermissions : флаги

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

Константа Описание
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 был уменьшен до очень маленького размера, жесты pinch всё ещё были возможны. Или, если кнопка на основе TapHandler расположена около края экрана, она может быть использована для соблюдения Закона Фиттса: реагировать на щелчки мыши на краю экрана, даже если кнопка визуально удалена от края на несколько пикселей.

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

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

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

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

target : Item

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

По умолчанию, он такой же, как и parent, элемент, внутри которого объявлен обработчик. Однако иногда бывает полезно установить target на другой элемент, чтобы обрабатывать события внутри одного элемента, но манипулировать другим; или чтобы null, чтобы отключить стандартное поведение и сделать что-то другое вместо этого.

[только для чтения] translation : QVector2D

Смещение с момента начала жеста.

xAxis.enabled : bool

xAxis управляет ограничениями горизонтального перетаскивания.

minimum — минимальное допустимое значение x, которое будет применено к target. maximum — максимальное допустимое значение x, которое будет применено к target. Если enabled — true, горизонтальное перетаскивание разрешено.

yAxis.enabled : bool

yAxis управляет ограничениями вертикального перетаскивания.

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

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

canceled(point)

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

grabChanged(transition, EventPoint point)

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

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

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

Spec-Zone.ru

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