このページでは

SwipeDelegate QML Type

スワイプ可能なアイテムのデリゲート。詳細...

Import Statement: import QtQuick.Controls
Inherits:

ItemDelegate

プロパティ

関連プロパティ

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

信号

添付の信号

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

方法

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

詳細な説明

SwipeDelegate は、左右にスワイプすることで追加のオプションや情報を表示できるビュー項目を提供します。これは、ListView などのビューにおいてデリゲートとして使用されます。

以下の例では、ListView 内でSwipeDelegateを使用し、左にスワイプすることでアイテムを削除できるようにしています:

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のAPIは、AbstractButton から継承されたItemDelegate から継承されています。例えば、text を設定したり、AbstractButton APIを使用してclicks に反応したりすることができます。

スワイプの進行状況に関する情報や、スワイプ時に表示すべきコンポーネントは、いずれも `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 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

名前説明
positionこの読み取り専用プロパティは、コントロールの左右の端に対するスワイプの位置を保持します。この値が-1.0 (左端)または1.0 (右端)に達し、マウスボタンが離されると、complete はtrue となります。
completeこの読み取り専用プロパティは、コントロールが左または右にスワイプされた後、完全に表示されているかどうかを示します。

complete がtrue の場合、left 、right 、またはbehind で宣言されたインタラクティブな項目は、マウスイベントを受け取ります。

enabledこのプロパティは、コントロールがスワイプ可能かどうかを決定します。

このプロパティは、QtQuick.Controls 2.2 で追加されました。

leftこのプロパティは、left デリゲートを保持します。

左側のデリゲートは、contentItem およびbackground の両方の背後に配置されます。SwipeDelegate が右にスワイプされると、この項目が徐々に表示されます。

ここでは、インタラクティブなアイテムと非インタラクティブなアイテムの両方を使用できます。通常のイベント処理ルールが適用されます。Button のようなインタラクティブなコントロールが使用されている場合、ボタンがクリックされても、SwipeDelegate のインタラクションシグナル(clicked()など)は発火しません。

behindこのプロパティは、SwipeDelegate を左右にスワイプした際に表示されるデリゲートを保持します。

left およびright のデリゲートと同様に、このデリゲートはcontentItem およびbackground の両方の後ろに配置されます。ただし、behind が設定されているSwipeDelegate は、どちら側からでも連続してスワイプすることができ、常に同じ項目が表示されます。

ここでは、インタラクティブなアイテムと非インタラクティブなアイテムの両方を使用できます。通常のイベント処理ルールが適用されます。Button のようなインタラクティブなコントロールが使用されている場合、ボタンがクリックされても、clicked()のようなSwipeDelegate のインタラクションシグナルは発火しません。

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

このプロパティは、QtQuick.Controls 2.2で追加されました。

関連項目: contentItem 、background 、swipe.open()、およびswipe.close()。

添付プロパティのドキュメント

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

このプロパティは、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 アイテムに2つのアクションを設定するには、以下のコードを使用します:

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

各background アイテム内のcolor の割り当てにおいて、ラベルの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()も参照してください 。

シグナルのドキュメント

[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()も参照してください 。

添付のシグナルに関するドキュメント

[attached, 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 に設定します。contentItem およびbackground のx 位置に対して定義されているアニメーションはすべてトリガーされます。

このメソッドは、QtQuick.Controls 2.1 (Qt 5.8) で導入されました。

swipe およびswipe.open()も参照してください 。

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

このメソッドは、スワイプのposition を設定し、指定されたside から開くようにします。

使用可能な値:

定数説明
SwipeDelegate.Leftposition が1 に設定され、スワイプが左側から開くようになります。swipe.left またはswipe.behind のいずれかが指定されている必要があります。指定されていない場合、この呼び出しは無視されます。
SwipeDelegate.Rightposition が-1 に設定され、右からスワイプして開くようになります。swipe.right またはswipe.behind のいずれかが指定されている必要があります。指定されていない場合、この呼び出しは無視されます。

x の位置としてcontentItem およびbackground が定義されている場合、それらのアニメーションがトリガーされます。

このメソッドは、QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

swipe および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.