Spec-Zone.ru › Qt 5.11

Тип QML SwipeDelegate

Делегат элемента, который можно перетащить влево или вправо. Подробнее...

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

ItemDelegate

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

Свойства

  • swipe
    • swipe.position : real
    • swipe.complete : bool
    • swipe.enabled : bool
    • swipe.left : Component
    • swipe.behind : Component
    • swipe.right : Component
    • swipe.leftItem : Item
    • swipe.behindItem : Item
    • swipe.rightItem : Item
    • swipe.transition : 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. Например, вы можете установить text и реагировать на щелчки с помощью 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.position : real

Имя Описание
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()

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

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

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

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

void swipe.completed()

Этот сигнал отправляется, когда swipe.complete становится true.

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

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

См. также swipe.

void swipe.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 для получения информации о правильном использовании свойств, связанных с событиями.

Этот сигнал был представлен в 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/archives/qt-5.11/qml-qtquick-controls2-swipedelegate.html

Spec-Zone.ru

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