En esta página

SwipeDelegate QML Type

Delegado de elemento deslizable. Más...

Import Statement: import QtQuick.Controls
Inherits:

ItemDelegate

Propiedades

Propiedades anexas

  • pressed : bool (since QtQuick.Controls 2.1 (Qt 5.8))

Señales

Señales adjuntas

  • clicked() (since QtQuick.Controls 2.1 (Qt 5.8))

Métodos

  • void swipe.close() (since QtQuick.Controls 2.1 (Qt 5.8))
  • void swipe.open(enumeration side) (since QtQuick.Controls 2.2 (Qt 5.9))

Descripción detallada

SwipeDelegate presenta un elemento de la vista que puede deslizarse hacia la izquierda o la derecha para mostrar más opciones o información. Se utiliza como delegado en vistas como ListView.

En el siguiente ejemplo, SwipeDelegate se utiliza en ListView para permitir que se eliminen elementos de la vista deslizando el dedo hacia la izquierda:

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: listView.width

        required property string sender
        required property string title
        required property int index

        ListView.onRemove: removeAnimation.start()

        SequentialAnimation {
            id: removeAnimation

            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 hereda su API de ItemDelegate, que a su vez hereda de AbstractButton. Por ejemplo, puede configurar text, y reaccionar a clicks utilizando la API AbstractButton.

La información relativa al progreso de un deslizamiento, así como los componentes que deben mostrarse al deslizar, están disponibles a través del objeto de propiedades agrupadas swipe. Por ejemplo, swipe.position mantiene la posición del swipe dentro del rango -1.0 a 1.0. La propiedad swipe.left determina qué elemento se mostrará cuando el control se deslice hacia la derecha, y viceversa para swipe.right. El posicionamiento de estos componentes se deja a la decisión de las aplicaciones. Por ejemplo, sin especificar ninguna posición para swipe.left o swipe.right, ocurrirá lo siguiente:

Si swipe.left y swipe.right están anclados a la izquierda y a la derecha del elemento background (respectivamente), se comportarán así:

Si se utilizan swipe.left y swipe.right, el control no podrá deslizarse más allá de los bordes izquierdo y derecho. Para lograr este tipo de comportamiento "envolvente", establezca swipe.behind en su lugar. Esto hará que se muestre el mismo elemento independientemente de la dirección en la que se deslice el control. Por ejemplo, en la imagen siguiente, definimos swipe.behind y deslizamos el control repetidamente en ambas direcciones:

Consulte también Personalización de SwipeDelegate, Controles delegados y Ejemplo de galería.

Documentación de propiedades

swipe group

swipe.behind : Component

swipe.behindItem : Item

swipe.complete : bool

swipe.enabled : bool

swipe.left : Component

swipe.leftItem : Item

swipe.position : real

swipe.right : Component

swipe.rightItem : Item

swipe.transition : Transition

NombreDescripción
posiciónEsta propiedad de sólo lectura contiene la posición del swipe relativa a cualquier lado del control. Cuando este valor alcanza -1.0 (lado izquierdo) o 1.0 (lado derecho) y se suelta el botón del ratón, complete será true.
completoEsta propiedad de sólo lectura indica si el control está completamente expuesto después de haber sido deslizado hacia la izquierda o hacia la derecha.

Cuando complete es true, cualquier elemento interactivo declarado en left, right, o behind recibirá eventos de ratón.

habilitadoEsta propiedad determina si el control puede ser deslizado o no.

Esta propiedad se añadió en QtQuick.Controls 2.2.

leftEsta propiedad contiene el delegado izquierdo.

El delegado izquierdo se sitúa detrás de contentItem y background. Cuando se desliza el SwipeDelegate hacia la derecha, este elemento se revela gradualmente.

Aquí se pueden utilizar tanto elementos interactivos como no interactivos. Se aplican las reglas normales de manejo de eventos; si se utiliza un control interactivo como Button, las señales de interacción de SwipeDelegate como clicked() no se emitirán si se pulsa el botón.

detrás deEsta propiedad contiene el delegado que se muestra cuando el SwipeDelegate es deslizado tanto a la izquierda como a la derecha.

Al igual que con los delegados left y right, se sitúa detrás de contentItem y background. Sin embargo, un SwipeDelegate cuyo behind haya sido establecido puede ser deslizado continuamente desde cualquier lado, y siempre mostrará el mismo elemento.

Aquí se pueden utilizar tanto elementos interactivos como no interactivos. Se aplican las reglas normales de gestión de eventos; si se utiliza un control interactivo como Button, las señales de interacción de SwipeDelegate como clicked() no se emitirán si se hace clic en el botón.

derechaEsta propiedad contiene el delegado derecho.

El delegado derecho se sitúa detrás de contentItem y background. Cuando se desliza el SwipeDelegate hacia la izquierda, este elemento se revelará gradualmente.

Aquí se pueden utilizar tanto elementos interactivos como no interactivos. Se aplican las reglas normales de manejo de eventos; si se utiliza un control interactivo como Button, las señales de interacción de SwipeDelegate como clicked() no se emitirán si se pulsa el botón.

leftItemEsta propiedad de sólo lectura contiene el elemento instanciado desde el componente left.

Si left no se ha establecido, o la posición no ha cambiado desde la creación de SwipeDelegate, esta propiedad será null.

behindItemEsta propiedad de sólo lectura contiene el elemento instanciado desde el componente behind.

Si no se ha establecido behind, o la posición no ha cambiado desde la creación de SwipeDelegate, esta propiedad será null.

elementoderechoEsta propiedad de sólo lectura contiene el elemento instanciado desde el componente right.

Si no se ha establecido right, o la posición no ha cambiado desde la creación de SwipeDelegate, esta propiedad será null.

transiciónEsta propiedad contiene la transición que se aplica cuando se suelta un swipe, o se llama a swipe.open() o swipe.close().
SwipeDelegate {
    swipe.transition: Transition {
        SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic }
    }
}

Esta propiedad se añadió en QtQuick.Controls 2.2.

Véase también contentItem, background, swipe.open(), y swipe.close().

Documentación de la propiedad Attached

SwipeDelegate.pressed : bool [read-only, since QtQuick.Controls 2.1 (Qt 5.8)]

Esta propiedad puede adjuntarse a un elemento no interactivo declarado en swipe.left, swipe.right, o swipe.behind, para detectar si está pulsado. Los elementos sólo pueden ser pulsados cuando swipe.complete es true.

Por ejemplo:

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"
    }
}

Es posible tener múltiples ítems que reciban individualmente eventos de ratón y táctiles. Por ejemplo, para tener dos acciones en el ítem swipe.right, utilice el siguiente código:

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"
        }
    }
}

Observe cómo la asignación color en cada ítem background califica la propiedad adjunta con el id de la etiqueta. Esto es importante; usar las propiedades adjuntas en un elemento hace que ese elemento acepte eventos. Supongamos que hubiéramos omitido el id en el ejemplo anterior:

color: SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"

El elemento de fondo Rectangle es hijo de la etiqueta, por lo que naturalmente recibe eventos antes que ella. En la práctica, esto significa que el color de fondo cambiará, pero el manejador onClicked de la etiqueta nunca será llamado.

Para los controles interactivos (como Button) declarados en estos elementos, utilice su respectiva propiedad pressed en su lugar.

Para pulsaciones en el propio SwipeDelegate, utilice su propiedad pressed.

Esta propiedad se introdujo en QtQuick.Controls 2.1 (Qt 5.8).

Véase también clicked().

Documentación de Señales

[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.closed()

Esta señal se emite cuando el delegado ha sido swipeado a cerrado y la transición ha finalizado.

Es útil para realizar alguna acción tras la cancelación de un swipe. Por ejemplo, se puede utilizar para cancelar la eliminación del delegado de la lista en la que se encuentra.

Nota: El manejador correspondiente es swipe.onClosed.

Esta señal se introdujo en QtQuick.Controls 2.2 (Qt 5.9).

Véase también swipe y swipe.opened().

[since QtQuick.Controls 2.1 (Qt 5.8)] void swipe.completed()

Esta señal se emite cuando swipe.complete se convierte en true.

Es útil para realizar alguna acción al finalizar un swipe. Por ejemplo, se puede utilizar para eliminar el delegado de la lista en la que se encuentra.

Nota: El manejador correspondiente es swipe.onCompleted.

Esta señal se introdujo en QtQuick.Controls 2.1 (Qt 5.8).

Véase también swipe.

[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.opened()

Esta señal se emite cuando el delegado ha sido deslizado y la transición ha finalizado.

Es útil para realizar alguna acción al finalizar el deslizamiento. Por ejemplo, puede utilizarse para eliminar el delegado de la lista en la que se encuentra.

Nota: El manejador correspondiente es swipe.onOpened.

Esta señal se introdujo en QtQuick.Controls 2.2 (Qt 5.9).

Véase también swipe y swipe.closed().

Documentación de la señal adjunta

[since QtQuick.Controls 2.1 (Qt 5.8)] clicked()

Esta señal puede adjuntarse a un elemento no interactivo declarado en swipe.left, swipe.right, o swipe.behind, para reaccionar a los clics. Sólo se puede hacer clic en los elementos cuando swipe.complete es true.

Para los controles interactivos (como Button) declarados en estos elementos, utilice su respectiva señal clicked() en su lugar.

Para responder a los clics en el propio SwipeDelegate, utilice su señal clicked().

Nota: Consulte la documentación de pressed para obtener información sobre cómo utilizar correctamente las propiedades relacionadas con eventos.

Nota: El manejador correspondiente es onClicked.

Esta señal se introdujo en QtQuick.Controls 2.1 (Qt 5.8).

Ver también pressed.

Documentación del Método

[since QtQuick.Controls 2.1 (Qt 5.8)] void swipe.close()

Este método establece el position del swipe en 0. Se activarán todas las animaciones definidas para la posición x de contentItem y background.

Este método se introdujo en QtQuick.Controls 2.1 (Qt 5.8).

Véase también swipe y swipe.open().

[since QtQuick.Controls 2.2 (Qt 5.9)] void swipe.open(enumeration side)

Este método establece el position del swipe para que se abra desde el side especificado.

Valores disponibles:

ConstanteDescripción
SwipeDelegate.Leftposition se establece en 1, lo que hace que el swipe se abra desde la izquierda. Se debe haber especificado swipe.left o swipe.behind; de lo contrario, se ignora la llamada.
SwipeDelegate.Rightposition se establece en -1, lo que hace que el barrido se abra desde la derecha. Se debe haber especificado swipe.right o swipe.behind; de lo contrario, se ignora la llamada.

Se activarán todas las animaciones definidas para la posición x de contentItem y background.

Este método se introdujo en QtQuick.Controls 2.2 (Qt 5.9).

Véase también swipe y swipe.close().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.