Spec-Zone.ru › Qt

Тип QML SwipeDelegate

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

Заявление об импорте: import QtQuick.Controls
С версии: 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: 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 равно 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().

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

[только для чтения, начиная с 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

Spec-Zone.ru

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