Spec-Zone.ru › Qt 5.12

Тип QML SwipeDelegate

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

Заявление об импорте: import QtQuick.Controls 2.5
С момента: 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 background является дочерним элементом метки, поэтому он естественным образом получает события раньше. На практике это означает, что цвет фона изменится, но обработчик 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/qt-5.12/qml-qtquick-controls2-swipedelegate.html

Spec-Zone.ru

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