Drag QML Type

移動したアイテムのドラッグ&ドロップイベントを指定します。詳細...

Import Statement: import QtQuick

付属プロパティ

付属シグナル

付属メソッド

詳細説明

Drag アタッチド プロパティを使用すると、任意のアイテムをシーン内のドラッグ&ドロップ イベントのソースにすることができます。

ドラッグがアイテム上でactive 、そのアイテムの位置が変化するとドラッグイベントが生成され、アイテムの新しい位置と交差するDropArea に送られます。ドラッグ&ドロップ・イベント・ハンドラを実装している他のアイテムも、これらのイベントを受け取ることができます。

次のスニペットは、MouseArea でアイテムをドラッグする方法を示しています。しかし、ドラッグはマウスドラッグに限定されません。タッチイベント、アニメーション、バインディングなど、アイテムを移動できるものすべてがドラッグイベントを生成できます。

import QtQuick

Item {
    width: 200; height: 200

    DropArea {
        x: 75; y: 75
        width: 50; height: 50

        Rectangle {
            anchors.fill: parent
            color: "green"

            visible: parent.containsDrag
        }
    }

    Rectangle {
        x: 10; y: 10
        width: 20; height: 20
        color: "red"

        Drag.active: dragArea.drag.active
        Drag.hotSpot.x: 10
        Drag.hotSpot.y: 10

        MouseArea {
            id: dragArea
            anchors.fill: parent

            drag.target: parent
        }
    }
}

ドラッグは、Drag.cancel() でキャンセルするか、Drag.active を false に設定して終了させるか、Drag.drop() を呼び出してドロップイベントで終了させることができます。ドロップイベントが受け入れられた場合、Drag.drop() はイベントの受信者によって選択されたdrop action を返します。そうでない場合は Qt.IgnoreAction を返します。

Qt Quick Examples - Drag and Dropも参照してください

Attached プロパティの説明

Drag.active : bool [read-only]

このプロパティは、ドラッグイベントシーケンスが現在アクティブであるかどうかを保持します。

このプロパティをMouseArea::drag の active プロパティにバインドすると、ユーザーがドラッグを開始したときにstartDrag が呼び出されます。

また、このプロパティをtrueに設定すると、アイテムの現在位置を示すQDragEnterイベントがシーンに送信されます。falseに設定すると、QDragLeaveイベントが送信されます。

ドラッグがアクティブな間、アイテムの位置が変更されると、アイテムの新しい位置を持つ QDragMove イベントがシーンに送られます。


Drag.dragType : enumeration

このプロパティは、自動的にドラッグを開始するか、何もしないか、または後方互換性のある内部ドラッグを使用するかを示します。デフォルトでは、後方互換性のある内部ドラッグを使用します。

ドラッグは、startDrag を使用して手動で開始することもできます。

定数説明
Drag.Noneドラッグを自動的に開始しない
Drag.Automaticドラッグを自動的に開始する
Drag.Internal(デフォルト) 後方互換性のあるドラッグを自動的に開始する。

Drag.Automatic を使用する場合、mimeData も定義し、active プロパティをMouseArea の active プロパティにバインドする必要があります:MouseArea::drag.active


Drag.hotSpot : QPointF

このプロパティは、アイテムの左上からの相対的なドラッグ位置を保持します。

デフォルトでは (0, 0) です。

ホットスポットを変更すると、更新された位置で新しいドラッグ移動がトリガーされます。


Drag.imageSource : QUrl

このプロパティは、ドラッグ&ドロップ操作中にデータを表すために使用される画像の URL を保持します。ドラッグ操作の開始後にこのプロパティを変更しても効果はありません。

以下の例では、アイテムの内容をドラッグ画像として使用しています:

import QtQuick

Item {
    width: 200; height: 200

    Rectangle {
        anchors.centerIn: parent
        width: text.implicitWidth + 20; height: text.implicitHeight + 10
        color: "green"
        radius: 5

        Drag.dragType: Drag.Automatic
        Drag.supportedActions: Qt.CopyAction
        Drag.mimeData: {
            "text/plain": "Copied text"
        }

        Text {
            id: text
            anchors.centerIn: parent
            text: "Drag me"
        }

        DragHandler {
            id: dragHandler
            onActiveChanged:
                if (active) {
                    parent.grabToImage(function(result) {
                        parent.Drag.imageSource = result.url
                        parent.Drag.active = true
                    })
                } else {
                    parent.Drag.active = false
                }
        }
    }
}

Item::grabToImage()も参照してください


Drag.imageSourceSize : size [since 6.8]

このプロパティは、ドラッグ&ドロップ操作中にデータを表現するために使用される画像のサイズを保持します。ドラッグ操作の開始後にこのプロパティを変更しても効果はありません。

このプロパティは、大きな画像が必要以上にメモリを使用しないように、読み込まれた画像に保存される最大ピクセル数を設定します。詳しくはImage.sourceSize をご覧下さい。

下の例では、あるサイズでレンダリングされた SVG 画像を、ドラッグ画像用に異なるサイズで再レンダリングしています:

import QtQuick

Item {
    width: 200; height: 200

    Image {
        anchors.centerIn: parent
        source: "images/qt_logo.svg"
        sourceSize.width: 96

        Drag.dragType: Drag.Automatic
        Drag.supportedActions: Qt.CopyAction
        Drag.mimeData: {
            "text/plain": "Qt Quick rocks!"
        }
        Drag.imageSource: "images/qt_logo.svg"
        Drag.imageSourceSize: Qt.size(48, 35)
        Drag.active: dragHandler.active

        DragHandler {
            id: dragHandler
        }
    }
}

このプロパティは Qt 6.8 で導入されました。

imageSourceItem::grabToImage()も参照してください


Drag.keys : stringlist

このプロパティは、DropArea がドラッグイベントをフィルタリングするために使用できるキーのリストを保持します。

ドラッグ中にキーを変更すると、ドラッグイベントのシーケンスがリセットされます。


Drag.mimeData : var

このプロパティは、startDrag の間に使用される MIME タイプからデータへのマップを保持します。MIME データは、MIME タイプに一致するタイプ(例えば、MIME タイプが "text/plain" の場合は文字列、MIME タイプが "image/png" の場合は画像)、または MIME タイプに従ってエンコードされたデータを持つArrayBuffer である必要があります。


Drag.proposedAction : enumeration

このプロパティは、Drag.drop() の戻り値としてドラッグソースが推奨するアクションを保持します。

proposedAction への変更は、更新された提案で move イベントをトリガします。


Drag.source : Object

このプロパティは、イベントのソースとしてドラッグイベントの受信者に識別されるオブジェクトを保持します。デフォルトでは、これは Drag プロパティがアタッチされているアイテムです。

ドラッグがアクティブなときにソースを変更すると、ドラッグイベントの順序がリセットされます。


Drag.supportedActions : flags

このプロパティは、ドラッグ・ソースがサポートする Drag.drop() の戻り値を保持します。

ドラッグがアクティブな間に supportedActions を変更すると、ドラッグの leave イベントの後に新しいソースでドラッグの enter イベントを送信することで、ドラッグイベントのシーケンスがリセットされます。


Drag.target : Object

ドラッグがアクティブな間、このプロパティは、ドラッグされたアイテムから enter イベントを受け入れる最後のオブジェクトを保持します。

ドラッグがアクティブでないとき、このプロパティはドラッグを終了するドロップイベントを受け付けたオブジェクトを保持します。ドロップを受け付けたオブジェクトがないか、ドラッグがキャンセルされた場合、ターゲットはNULLになります。


Attached シグナルの説明

dragFinished(DropAction dropAction)

このシグナルは、ドラッグが終了し、ドラッグがstartDrag() メソッドで開始されたか、dragType プロパティを使用して自動的に開始されたときに発行されます。

dropAction は、ターゲットアイテムが受け付けたアクションを保持します。

注: 対応するハンドラはonDragFinished です。

drop()も参照してください


dragStarted()

このシグナルは、startDrag() メソッドでドラッグが開始されたとき、またはdragType プロパティを使用して自動的に開始されたときに発行されます。

注意: 対応するハンドラはonDragStarted です。


Attached メソッドのドキュメント

void cancel()

ドラッグシーケンスを終了します。


enumeration drop()

ターゲットアイテムにドロップイベントを送信することで、ドラッグシーケンスを終了します。

ターゲットアイテムが受け付けたアクションを返します。ターゲットアイテムまたは親がドロップイベントを受け入れない場合、Qt.IgnoreAction が返されます。

返されるドロップアクションは以下のいずれかです:

定数説明
Qt.CopyActionデータをターゲットにコピー
Qt.MoveActionソースからターゲットへデータを移動
Qt.LinkActionソースからターゲットへのリンクを作成する。
Qt.IgnoreActionアクションを無視する(データに対して何もしない)。

void start(flags supportedActions)

ドラッグイベントの送信を開始します。startDrag 、新しいスタイルのドラッグ開始方法です。

オプションの引数supportedActions を使用すると、開始するシーケンスのsupportedActions プロパティをオーバーライドできます。


void startDrag(flags supportedActions)

ドラッグイベントの送信を開始します。

オプションの引数supportedActions は、開始シーケンスのsupportedActions プロパティをオーバーライドするために使用できます。


本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。