このページでは

Drag QML Type

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

Import Statement: import QtQuick

付属プロパティ

付属信号

付属メソッド

詳細説明

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

ドラッグがアイテムに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 Property ドキュメント

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 : point

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

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

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

Drag.imageSource : url

このプロパティは、ドラッグ&ドロップ操作中にデータを表すために使用される画像の 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 "であれば文字列、"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になります。

付属のシグナル・ドキュメント

dragFinished(DropAction dropAction)

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

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

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

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

dragStarted()

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

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

アタッチメソッドのドキュメント

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 プロパティをオーバーライドできます。

© 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.