Тип QML Drag
Для указания событий перетаскивания и перемещения элементов. Подробнее...
| Заявление об импорте: | import QtQuick 2.14 |
Присоединённые свойства
- active : bool
- dragType : перечисление
- hotSpot : QPointF
- imageSource : QUrl
- keys : строковый список
- mimeData : строковый список
- proposedAction : перечисление
- source : Объект
- supportedActions : флаги
- target : Объект
Присоединённые сигналы
- dragFinished(dropAction)
- dragStarted()
Присоединённые методы
Подробное описание
С помощью присоединённого свойства Drag любой элемент Item может быть источником событий перетаскивания и перемещения в сцене.
Когда перетаскивание активно на элементе, любое изменение его положения будет генерировать событие перетаскивания, которое будет отправлено любому элементу DropArea, пересекающемуся с новым положением элемента. Другие элементы, реализующие обработчики событий перетаскивания, также могут получать эти события.
Следующий фрагмент показывает, как элемент можно перетащить с помощью MouseArea. Однако перетаскивание не ограничивается перетаскиванием мышью; всё, что может перемещать элемент, может генерировать события перетаскивания, включая события касания, анимации и привязки.
import QtQuick 2.0
Item {
width: 200; height: 200
DropArea {
x: 75; y: 75
width: 50; height: 50
Rectangle {
anchors.fill: parent
color: "green"
visible: parent.containsDrag
}
}
Rectangle {
x: 10; y: 10
width: 20; height: 20
color: "red"
Drag.active: dragArea.drag.active
Drag.hotSpot.x: 10
Drag.hotSpot.y: 10
MouseArea {
id: dragArea
anchors.fill: parent
drag.target: parent
}
}
} Перетаскивание может быть завершено, либо отменив его с помощью Drag.cancel() или установив Drag.active в false, либо завершив его с помощью события отпуска, вызвав Drag.drop(). Если событие отпуска принято, Drag.drop() вернёт выбранное получателем события действие действия отпуска, в противном случае вернёт Qt.IgnoreAction.
См. также Примеры Qt Quick - Перетаскивание и размещение и Примеры Qt Quick - externaldraganddrop.
Документация по присоединённым свойствам
Drag.active : bool
Это свойство содержит значение, указывающее, активно ли в данный момент последовательность событий перетаскивания.
Привязка этого свойства к свойству active объекта MouseArea::drag вызовет startDrag, когда пользователь начнёт перетаскивание.
Установка этого свойства в true также отправит событие QDragEnter в сцену с текущим положением элемента. Установка его в false отправит событие QDragLeave.
Пока перетаскивание активно, любое изменение положения элемента будет отправлять событие QDragMove со новым положением элемента в сцену.
Drag.dragType : перечисление
Это свойство указывает, нужно ли автоматически запускать перетаскивания, ничего не делать или использовать совместимые со старыми версиями внутренние перетаскивания. По умолчанию используются совместимые со старыми версиями внутренние перетаскивания.
Перетаскивание также можно начать вручную с помощью startDrag.
- Drag.None - не запускать перетаскивания автоматически
- Drag.Automatic - запускать перетаскивания автоматически
- Drag.Internal (по умолчанию) - запускать совместимые со старыми версиями перетаскивания автоматически
При использовании Drag.Automatic также необходимо определить mimeData и привязать свойство active к свойству active объекта MouseArea : MouseArea::drag.active
Это свойство было добавлено в Qt 5.2.
Drag.hotSpot : QPointF
Это свойство содержит положение перетаскивания относительно верхнего левого угла элемента.
По умолчанию это (0, 0).
Изменения в hotSpot запускают новое перемещение с обновлённым положением.
Drag.imageSource : QUrl
Это свойство содержит URL изображения, которое будет использоваться для представления данных во время операции перетаскивания и размещения. Изменение этого свойства после начала операции перетаскивания не повлияет на неё.
В примере ниже содержимое элемента используется как изображение перетаскивания:
import QtQuick 2.8
Item {
width: 200; height: 200
Rectangle {
anchors.centerIn: parent
width: text.implicitWidth + 20; height: text.implicitHeight + 10
color: "green"
radius: 5
Drag.active: dragArea.drag.active
Drag.dragType: Drag.Automatic
Drag.supportedActions: Qt.CopyAction
Drag.mimeData: {
"text/plain": "Copied text"
}
Text {
id: text
anchors.centerIn: parent
text: "Drag me"
}
MouseArea {
id: dragArea
anchors.fill: parent
drag.target: parent
onPressed: parent.grabToImage(function(result) {
parent.Drag.imageSource = result.url
})
}
}
} Это свойство было добавлено в Qt 5.8.
См. также Item::grabToImage().
Drag.keys : строковый список
Это свойство содержит список ключей, которые могут быть использованы элементом DropArea для фильтрации событий перетаскивания.
Изменение ключей во время активного перетаскивания сбросит последовательность событий перетаскивания, отправив событие drag leave, за которым последует событие drag enter с новым источником.
Drag.mimeData : строковый список
Это свойство содержит карту mimeData, используемую во время startDrag.
Это свойство было добавлено в Qt 5.2.
Drag.proposedAction : перечисление
Это свойство содержит рекомендуемое действие источником перетаскивания в качестве возвращаемого значения от Drag.drop().
Изменения в proposedAction вызовут событие перемещения с обновлённым предложением.
Drag.source : Объект
Это свойство содержит объект, который идентифицируется получателями событий перетаскивания как источник событий. По умолчанию это элемент, к которому прикреплено свойство Drag.
Изменение источника во время активного перетаскивания сбросит последовательность событий перетаскивания, отправив событие drag leave, за которым последует событие drag enter с новым источником.
Drag.supportedActions : флаги
Это свойство содержит возвращаемые значения Drag.drop(), поддерживаемые источником перетаскивания.
Изменение supportedActions во время активного перетаскивания сбросит последовательность событий перетаскивания, отправив событие drag leave, за которым последует событие drag enter с новым источником.
Drag.target : Объект
Во время активного перетаскивания это свойство содержит последний объект, принявший событие enter от перемещаемого элемента. Если текущее положение перетаскивания не пересекает ни один принимающий целевой объект, оно является null.
Когда перетаскивание неактивно, это свойство содержит объект, который принял событие отпуска, завершившее перетаскивание. Если ни один объект не принял событие отпуска или перетаскивание было отменено, target будет null.
Документация по присоединённым сигналам
dragFinished(dropAction)
Этот сигнал испускается при завершении перетаскивания, если перетаскивание было начато с помощью метода startDrag() или запущено автоматически с помощью свойства dragType.
dropAction содержит принятое целевым элементом действие.
Соответствующий обработчик — onDragFinished.
См. также drop().
dragStarted()
Этот сигнал испускается при запуске перетаскивания с помощью метода startDrag() или при его автоматическом запуске с помощью свойства dragType.
Соответствующий обработчик — onDragStarted.
Документация по присоединённым методам
void cancel()
Завершает последовательность перетаскивания.
перечисление drop()
Завершает последовательность перетаскивания, отправив событие отпуска целевому элементу.
Возвращает принятое целевым элементом действие. Если целевой элемент или родительский элемент не принимают событие отпуска, возвращается Qt.IgnoreAction.
Возвращаемое действие отпуска может быть одним из:
- Qt.CopyAction Скопировать данные в целевой объект
- Qt.MoveAction Переместить данные из источника в целевой объект
- Qt.LinkAction Создать ссылку от источника к целевому объекту.
- Qt.IgnoreAction Игнорировать действие (ничего не делать с данными).
void start(supportedActions)
Начинает отправку событий перетаскивания. Используется для запуска перетаскиваний старого стиля.
Необязательный аргумент supportedActions можно использовать для переопределения свойства supportedActions для начатой последовательности.
void startDrag(supportedActions)
Начинает отправку событий перетаскивания.
Дополнительный аргумент supportedActions может быть использован для переопределения свойства supportedActions для начатой последовательности.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtquick-drag.html