Spec-Zone.ru › Qt 5.15

Тип QML SwipeDelegate

Делегат элемента, который можно перетащить влево или вправо. Используется как делегат в представлениях, таких как ListView. Подробнее...

Заявление об импорте: import QtQuick.Controls 2.15
С момента: Qt 5.7
Наследует:

ItemDelegate

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

Свойства

  • 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: model.sender + " - " + model.title
        width: parent.width

        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)

            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 равно true, любые интерактивные элементы, объявленные в left, right, или behind, получат события мыши.

enabled Это свойство определяет, может ли элемент управления быть свайпнут.

Это свойство было добавлено в QtQuick.Controls 2.2.

left Это свойство содержит делегат слева.

Делегат слева находится за элементом contentItem и background. Когда SwipeDelegate свайпнут вправо, этот элемент будет постепенно открываться.

Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент, например, Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут отправляться, если нажата кнопка.

behind Это свойство содержит делегат, который отображается, когда SwipeDelegate свайпнут влево и вправо.

Как и делегаты left и right, он находится за contentItem и background. Однако SwipeDelegate, у которого behind задано, может быть непрерывно свайпнут с любой стороны и всегда будет показывать тот же элемент.

Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент, например, Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут отправляться, если нажата кнопка.

right Это свойство содержит делегат справа.

Делегат справа расположен за contentItem и background. Когда SwipeDelegate свайпнут влево, этот элемент будет постепенно открываться.

Здесь можно использовать как интерактивные, так и неинтерактивные элементы. Применяются стандартные правила обработки событий; если используется интерактивный элемент, например, Button, сигналы взаимодействия SwipeDelegate, такие как clicked(), не будут отправляться, если нажата кнопка.

leftItem Это свойство только для чтения, содержащее элемент, созданный из компонента left.

Если left не задано или положение не изменилось с момента создания SwipeDelegate, это свойство будет null.

behindItem Это свойство только для чтения, содержащее элемент, созданный из компонента behind.

Если behind не задано или положение не изменилось с момента создания SwipeDelegate, это свойство будет null.

rightItem Это свойство только для чтения, содержащее элемент, созданный из компонента right.

Если right не задано или положение не изменилось с момента создания SwipeDelegate, это свойство будет null.

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().

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

[только для чтения] 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().

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

void swipe.closed()

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

Полезно для выполнения какого-либо действия при отмене свайпа. Например, его можно использовать для отмены удаления делегата из списка, в котором он находится.

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

Этот сигнал был введён в QtQuick.Controls 2.2 (Qt 5.9).

См. также swipe и swipe.opened().

void swipe.completed()

Этот сигнал излучается, когда swipe.complete становится true.

Полезно для выполнения какого-либо действия при завершении свайпа. Например, его можно использовать для удаления делегата из списка, в котором он находится.

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

Этот сигнал был введён в QtQuick.Controls 2.1 (Qt 5.8).

См. также swipe.

void swipe.opened()

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

Полезно для выполнения какого-либо действия при завершении свайпа. Например, его можно использовать для удаления делегата из списка, в котором он находится.

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

Этот сигнал был введён в QtQuick.Controls 2.2 (Qt 5.9).

См. также swipe и swipe.closed().

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

clicked()

Этот сигнал может быть присоединён к неинтерактивному элементу, объявленному в swipe.left, swipe.right, или swipe.behind, для реагирования на нажатия. Элементы могут быть нажаты только когда swipe.complete равно true.

Для интерактивных элементов управления (например, Button), объявленных в этих элементах, используйте соответствующий сигнал clicked().

Для реагирования на нажатия на сам SwipeDelegate используйте его сигнал clicked().

Примечание: Смотрите документацию по pressed для информации о правильном использовании событийных свойств.

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

Этот сигнал был введён в QtQuick.Controls 2.1 (Qt 5.8).

См. также pressed.

Документация по методам

void swipe.close()

Этот метод устанавливает position свайпа в 0. Будут запущены любые анимации, определённые для позиции x элементов contentItem и background.

Этот метод был введён в QtQuick.Controls 2.1 (Qt 5.8).

См. также swipe и swipe.open().

void swipe.open(enumeration 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-5.15/qml-qtquick-controls2-swipedelegate.html

Spec-Zone.ru

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