Sur cette page

Drag QML Type

Permet de spécifier les événements de glisser-déposer pour les éléments déplacés. Plus...

Import Statement: import QtQuick

Propriétés attachées

Signaux attachés

Méthodes attachées

Description détaillée

Grâce à la propriété Drag attached, n'importe quel élément peut devenir une source d'événements de glisser-déposer dans une scène.

Lorsqu'un glisser est active sur un élément, tout changement dans la position de cet élément génère un événement de glisser qui est envoyé à tout DropArea qui croise la nouvelle position de l'élément. Les autres éléments qui mettent en œuvre des gestionnaires d'événements de glisser-déposer peuvent également recevoir ces événements.

L'extrait suivant montre comment un élément peut être déplacé à l'aide d'une souris ( MouseArea). Cependant, le déplacement ne se limite pas à la souris ; tout ce qui peut déplacer un élément peut générer des événements de déplacement, y compris les événements tactiles, les animations et les liaisons.

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

Un glissement peut être interrompu soit en l'annulant avec Drag.cancel() ou en définissant Drag.active sur false, soit avec un événement de chute en appelant Drag.drop(). Si l'événement de dépôt est accepté, Drag.drop() renverra le drop action choisi par le destinataire de l'événement, sinon il renverra Qt.IgnoreAction.

Voir également Qt Quick Exemples - Glisser-déposer.

Documentation sur la propriété Attached

Drag.active : bool [read-only]

Cette propriété indique si une séquence d'événements de glissement est actuellement active.

En liant cette propriété à la propriété active de MouseArea::drag, startDrag sera appelé lorsque l'utilisateur commencera à faire glisser l'élément.

La définition de cette propriété à true enverra également un événement QDragEnter à la scène avec la position actuelle de l'élément. En lui attribuant la valeur false, un événement QDragLeave est envoyé.

Lorsqu'un glissement est actif, toute modification de la position d'un élément envoie à la scène un événement QDragMove indiquant la nouvelle position de l'élément.

Drag.dragType : enumeration

Cette propriété indique s'il convient de lancer automatiquement les drafts, de ne rien faire ou d'utiliser des drags internes rétrocompatibles. La valeur par défaut est l'utilisation de drags internes compatibles avec le retour en arrière.

Il est également possible de lancer manuellement un dragage à l'aide de startDrag.

ConstanteDescription
Drag.Nonene pas démarrer les dragues automatiquement
Drag.Automaticdémarre les dragues automatiquement
Drag.Internal(par défaut) démarre automatiquement les drags compatibles avec la rétrocompatibilité

Lorsque vous utilisez Drag.Automatic, vous devez également définir mimeData et lier la propriété active à la propriété active de MouseArea: MouseArea::drag.active

Drag.hotSpot : point

Cette propriété définit la position du curseur par rapport au coin supérieur gauche de l'élément.

Par défaut, cette position est (0, 0).

Toute modification du point chaud déclenche un nouveau déplacement avec la position mise à jour.

Drag.imageSource : url

Cette propriété contient l'URL de l'image qui sera utilisée pour représenter les données lors de l'opération de glisser-déposer. Modifier cette propriété après le début de l'opération de glisser-déposer n'aura aucun effet.

L'exemple ci-dessous utilise le contenu d'un élément comme image de glissement :

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

Voir aussi Item::grabToImage().

Drag.imageSourceSize : size [since 6.8]

Cette propriété définit la taille de l'image qui sera utilisée pour représenter les données lors de l'opération de glisser-déposer. Modifier cette propriété après le début de l'opération de glisser-déposer n'aura aucun effet.

Cette propriété définit le nombre maximal de pixels stockés pour l'image chargée afin que les grandes images n'utilisent pas plus de mémoire que nécessaire. Voir Image.sourceSize pour plus de détails.

L'exemple ci-dessous montre une image SVG rendue à une taille donnée, et la rend à une taille différente pour l'image glissée :

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

Cette propriété a été introduite dans Qt 6.8.

Voir également imageSource et Item::grabToImage().

Drag.keys : stringlist

Cette propriété contient une liste de clés pouvant être utilisées par DropArea pour filtrer les événements de glissement.

La modification des clés pendant qu'un déplacement est actif réinitialise la séquence des événements de déplacement en envoyant un événement de sortie de déplacement suivi d'un événement d'entrée de déplacement avec la nouvelle source.

Drag.mimeData : var

Cette propriété contient une correspondance entre le type de mime et les données utilisées pendant startDrag. Les données mime doivent être d'un type correspondant au type mime (par exemple une chaîne si le type mime est "text/plain", ou une image si le type mime est "image/png"), ou un ArrayBuffer dont les données sont encodées selon le type mime.

Drag.proposedAction : enumeration

Cette propriété contient une action recommandée par la source de déplacement comme valeur de retour de Drag.drop().

Les modifications apportées à proposedAction déclencheront un événement de déplacement avec la proposition mise à jour.

Drag.source : Object

Cette propriété contient un objet qui est identifié par les destinataires des événements de glissement comme étant la source de ces événements. Par défaut, il s'agit de l'élément auquel la propriété Drag est attachée.

Si la source est modifiée alors qu'un glissement est actif, la séquence des événements de glissement est réinitialisée par l'envoi d'un événement de sortie de glissement suivi d'un événement d'entrée de glissement avec la nouvelle source.

Drag.supportedActions : flags

Cette propriété contient les valeurs de retour de Drag.drop() prises en charge par la source du déplacement.

La modification des actions prises en charge pendant qu'un déplacement est actif réinitialise la séquence des événements de déplacement en envoyant un événement de sortie de déplacement suivi d'un événement d'entrée de déplacement avec la nouvelle source.

Drag.target : Object

Lorsqu'un glissement est actif, cette propriété contient le dernier objet à avoir accepté un événement d'entrée de l'élément glissé, si la position actuelle du glissement ne croise aucune cible acceptante, elle est nulle.

Lorsqu'un glisser n'est pas actif, cette propriété contient l'objet qui a accepté l'événement de dépôt qui a mis fin au glisser, si aucun objet n'a accepté le dépôt ou si le glisser a été annulé, la cible sera alors nulle.

Documentation sur les signaux attachés

dragFinished(DropAction dropAction)

Ce signal est émis lorsqu'un drag se termine et que le drag a été démarré avec la méthode startDrag() ou démarré automatiquement à l'aide de la propriété dragType.

dropAction contient l'action acceptée par l'élément cible.

Remarque : le gestionnaire correspondant est onDragFinished.

Voir également drop().

dragStarted()

Ce signal est émis lorsqu'un drag est démarré avec la méthode startDrag() ou lorsqu'il est démarré automatiquement à l'aide de la propriété dragType.

Remarque : le gestionnaire correspondant est onDragStarted.

Documentation de la méthode attachée

void cancel()

Termine une séquence de déplacement.

enumeration drop()

Termine une séquence de glissement en envoyant un événement de chute à l'élément cible.

Renvoie l'action acceptée par l'élément cible. Si l'élément cible ou un parent n'accepte pas l'événement de dépôt, Qt.IgnoreAction sera renvoyé.

L'action de dépôt renvoyée peut être l'une des suivantes

ConstanteDescription
Qt.CopyActionCopier les données vers la cible
Qt.MoveActionDéplacer les données de la source vers la cible
Qt.LinkActionCréer un lien entre la source et la cible.
Qt.IgnoreActionIgnorer l'action (ne rien faire avec les données).

void start(flags supportedActions)

Commence à envoyer des événements de drague. Utilisé pour démarrer les drags internes à l'ancienne. startDrag est la nouvelle méthode préférée pour démarrer les drags.

L'argument facultatif supportedActions peut être utilisé pour remplacer la propriété supportedActions pour la séquence démarrée.

void startDrag(flags supportedActions)

Commence à envoyer des événements de glissement.

L'argument facultatif supportedActions peut être utilisé pour remplacer la propriété supportedActions pour la séquence commencée.

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