Тип QML SwipeDelegate
Делегат элемента, поддерживающего свайп. Подробнее...
| Заявление об импорте: | import QtQuick.Controls |
| С версии: | Qt 5.7 |
| Наследует: |
Свойства
-
swipe
- swipe.behind : Компонент
- swipe.behindItem : Элемент
- swipe.complete : bool
- swipe.enabled : bool
- swipe.left : Компонент
- swipe.leftItem : Элемент
- swipe.position : real
- swipe.right : Компонент
- swipe.rightItem : Элемент
- swipe.transition : Переход
Присоединенные свойства
- pressed : bool
Сигналы
- void swipe.closed()
- void swipe.completed()
- void swipe.opened()
Присоединенные сигналы
- clicked()
Методы
- void swipe.close()
- void swipe.open(перечисление side)
Подробное описание
SwipeDelegate представляет элемент представления, который можно свайпать влево или вправо, чтобы отобразить дополнительные параметры или информацию. Он используется в качестве делегата в представлениях, таких как ListView.
В следующем примере SwipeDelegate используется в ListView, чтобы позволить удалять элементы из него свайпом влево:
ListView {
id: listView
anchors.fill: parent
model: ListModel {
ListElement { sender: "Bob Bobbleton"; title: "How are you going?" }
ListElement { sender: "Rug Emporium"; title: "SALE! All rugs MUST go!" }
ListElement { sender: "Electric Co."; title: "Electricity bill 15/07/2016 overdue" }
ListElement { sender: "Tips"; title: "Five ways this tip will save your life" }
}
delegate: SwipeDelegate {
id: swipeDelegate
text: sender + " - " + title
width: parent.width
required property string sender
required property string title
ListView.onRemove: SequentialAnimation {
PropertyAction {
target: swipeDelegate
property: "ListView.delayRemove"
value: true
}
NumberAnimation {
target: swipeDelegate
property: "height"
to: 0
easing.type: Easing.InOutQuad
}
PropertyAction {
target: swipeDelegate
property: "ListView.delayRemove"
value: false
}
}
swipe.right: Label {
id: deleteLabel
text: qsTr("Delete")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
anchors.right: parent.right
SwipeDelegate.onClicked: listView.model.remove(index)
required property int index
background: Rectangle {
color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
}
}
}
} SwipeDelegate наследует свой API от ItemDelegate, который наследуется от AbstractButton. Например, можно задать текст и реагировать на щелчки с помощью API AbstractButton.
Информация о ходе свайпа, а также компоненты, которые должны быть показаны при свайпе, доступны через групповый свойственный объект swipe. Например, swipe.position содержит положение свайпа в диапазоне -1.0 до 1.0. Свойство swipe.left определяет, какой элемент будет отображаться, когда элемент управления свайпится вправо, и наоборот для swipe.right. Размещение этих компонентов остается на усмотрение приложений. Например, без указания позиции для swipe.left или swipe.right, произойдет следующее:
Если swipe.left и swipe.right закреплены слева и справа от элемента background (соответственно), они будут вести себя так:
При использовании swipe.left и swipe.right, элемент управления нельзя перетащить за крайние левые и правые границы. Для достижения такого поведения "обёртывания", задайте swipe.behind. В результате будет отображаться тот же элемент независимо от направления свайпа. Например, на изображении ниже мы задали swipe.behind и затем многократно свайпим элемент управления в обоих направлениях:
См. также Настройка SwipeDelegate, Делегатские элементы управления и Пример свайпа для удаления.
Документация свойств
swipe.behind : Компонент
| Имя | Описание |
|---|---|
| position | Это свойство только для чтения, которое хранит позицию свайпа относительно левой или правой стороны элемента управления. Когда это значение достигает -1.0 (левая сторона) или 1.0 (правая сторона), а кнопка мыши отпущена, complete будет true. |
| complete | Это свойство только для чтения, которое указывает, полностью ли элемент управления открыт после свайпа влево или вправо. Когда свойство complete равно |
| enabled | Это свойство определяет, можно ли свайпить элемент управления. Это свойство было добавлено в QtQuick.Controls 2.2. |
| left | Это свойство хранит левый делегат. Левый делегат располагается позади как contentItem, так и background. Когда SwipeDelegate свайпнется вправо, этот элемент будет постепенно отображаться. Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент управления, такой как Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут вызваны, если кнопка нажата. |
| behind | Это свойство хранит делегат, который отображается, когда SwipeDelegate свайпнется влево и вправо. Как и в случае с делегатами Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент управления, такой как Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут вызваны, если кнопка нажата. |
| right | Это свойство хранит правый делегат. Правый делегат располагается позади как contentItem, так и background. Когда SwipeDelegate свайпнется влево, этот элемент будет постепенно отображаться. Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент управления, такой как Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут вызваны, если кнопка нажата. |
| leftItem | Это свойство только для чтения, которое хранит элемент, созданный из компонента left.Если |
| behindItem | Это свойство только для чтения, которое хранит элемент, созданный из компонента behind.Если |
| rightItem | Это свойство только для чтения, которое хранит элемент, созданный из компонента right.Если |
| transition | Это свойство хранит анимацию, которая применяется при отпускании свайпа или при вызове swipe.open() или swipe.close().SwipeDelegate {
swipe.transition: Transition {
SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic }
}
} Это свойство было добавлено в Qt Quick Controls 2.2. |
См. также contentItem, background, swipe.open() и swipe.close().
Документация по присоединённым свойствам
[только для чтения, начиная с QtQuick.Controls 2.1 (Qt 5.8)] SwipeDelegate.pressed : bool
Это свойство можно прикрепить к неинтерактивному элементу, объявленному в swipe.left, swipe.right, или swipe.behind, для определения того, нажат ли он. Элементы могут быть нажаты только тогда, когда swipe.complete равно true.
Например:
swipe.right: Label {
anchors.right: parent.right
height: parent.height
text: "Action"
color: "white"
padding: 12
background: Rectangle {
color: SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
}
} Можно иметь несколько элементов, которые индивидуально получают события мыши и касания. Например, чтобы иметь два действия в элементе swipe.right, используйте следующий код:
swipe.right: Row {
anchors.right: parent.right
height: parent.height
Label {
id: moveLabel
text: qsTr("Move")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
SwipeDelegate.onClicked: console.log("Moving...")
background: Rectangle {
color: moveLabel.SwipeDelegate.pressed ? Qt.darker("#ffbf47", 1.1) : "#ffbf47"
}
}
Label {
id: deleteLabel
text: qsTr("Delete")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
SwipeDelegate.onClicked: console.log("Deleting...")
background: Rectangle {
color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
}
}
} Обратите внимание, как присвоение color в каждом элементе background квалифицирует присоединённое свойство с id метки. Это важно; использование присоединённых свойств на элементе заставляет этот элемент принимать события. Предположим, что мы упустили id в предыдущем примере:
color: SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato" Элемент фона Rectangle является дочерним элементом метки, поэтому он естественным образом получает события раньше её. На практике это означает, что цвет фона изменится, но обработчик onClicked в метке никогда не будет вызван.
Для интерактивных элементов управления (например, Button), объявленных в этих элементах, используйте соответствующее свойство pressed вместо него.
Для нажатий на сам SwipeDelegate используйте его свойство pressed.
Это свойство было введено в QtQuick.Controls 2.1 (Qt 5.8).
См. также clicked().
Документация по сигналам
[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.closed()
Этот сигнал испускается, когда делегат был свайпнут в закрытое состояние и анимация завершена.
Это полезно для выполнения действия при отмене свайпа. Например, это можно использовать для отмены удаления делегата из списка, в котором он находится.
Примечание: Соответствующий обработчик — swipe.onClosed.
Этот сигнал был введён в QtQuick.Controls 2.2 (Qt 5.9).
См. также swipe и swipe.opened().
[since QtQuick.Controls 2.1 (Qt 5.8)] void swipe.completed()
Этот сигнал испускается, когда swipe.complete становится true.
Это полезно для выполнения действия после завершения свайпа. Например, это можно использовать для удаления делегата из списка, в котором он находится.
Примечание: Соответствующий обработчик — swipe.onCompleted.
Этот сигнал был введён в QtQuick.Controls 2.1 (Qt 5.8).
См. также swipe.
[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.opened()
Этот сигнал испускается, когда делегат был свайпнут в открытое состояние и анимация завершена.
Это полезно для выполнения действия после завершения свайпа. Например, это можно использовать для удаления делегата из списка, в котором он находится.
Примечание: Соответствующий обработчик — swipe.onOpened.
Этот сигнал был введён в QtQuick.Controls 2.2 (Qt 5.9).
См. также swipe и swipe.closed().
Документация по присоединённым сигналам
[since QtQuick.Controls 2.1 (Qt 5.8)] clicked()
Этот сигнал может быть присоединён к неинтерактивному элементу, объявленному в swipe.left, swipe.right, или swipe.behind, для реагирования на щелчки. Элементы могут быть щелкнуты только тогда, когда swipe.complete равно true.
Для интерактивных элементов управления (например, Button), объявленных в этих элементах, используйте соответствующий сигнал clicked() вместо него.
Для реагирования на щелчки по самому SwipeDelegate используйте его сигнал clicked().
Примечание: См. документацию по pressed для получения информации о правильном использовании свойств, связанных с событиями.
Примечание: Соответствующий обработчик — onClicked.
Этот сигнал был введён в QtQuick.Controls 2.1 (Qt 5.8).
См. также pressed.
Документация по методам
[since QtQuick.Controls 2.1 (Qt 5.8)] void swipe.close()
Этот метод устанавливает position свайпа в 0. Будут вызваны любые анимации, определённые для позиции x элементов contentItem и background.
Этот метод был введён в QtQuick.Controls 2.1 (Qt 5.8).
См. также swipe и swipe.open().
[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.open(перечисление side)
Этот метод устанавливает position свайпа так, чтобы он открывался со стороны side.
Доступные значения:
| Константа | Описание |
|---|---|
SwipeDelegate.Left |
Значение position установлено в 1, что открывает свайп слева. Должны быть указаны swipe.left или swipe.behind; в противном случае вызов будет проигнорирован. |
SwipeDelegate.Right |
Значение position установлено в -1, что открывает свайп справа. Должны быть указаны swipe.right или swipe.behind; в противном случае вызов будет проигнорирован. |
Любые анимации, определённые для положения x элемента contentItem и background, будут запущены.
Этот метод был введён в QtQuick.Controls 2.2 (Qt 5.9).
См. также swipe и swipe.close().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-controls2-swipedelegate.html