En esta página

Drag QML Type

Para especificar eventos de arrastrar y soltar para Elementos movidos. Más...

Import Statement: import QtQuick

Propiedades adjuntas

Señales adjuntas

Métodos adjuntos

Descripción detallada

Utilizando la propiedad Drag attached, cualquier Item puede convertirse en una fuente de eventos drag and drop dentro de una escena.

Cuando un arrastre es active en un ítem, cualquier cambio en la posición de ese ítem generará un evento de arrastre que será enviado a cualquier DropArea que se cruce con la nueva posición del ítem. Otros elementos que implementen manejadores de eventos de arrastrar y soltar también pueden recibir estos eventos.

El siguiente fragmento muestra cómo se puede arrastrar un elemento con MouseArea. Sin embargo, el arrastre no se limita al ratón; cualquier cosa que pueda mover un elemento puede generar eventos de arrastre, incluyendo eventos táctiles, animaciones y vinculaciones.

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 arrastre puede terminarse cancelándolo con Drag.cancel() o estableciendo Drag.active en false, o puede terminarse con un evento drop llamando a Drag.drop(). Si el evento drop es aceptado, Drag.drop() devolverá el drop action elegido por el destinatario del evento, de lo contrario devolverá Qt.IgnoreAction.

Vea también Qt Quick Ejemplos - Arrastrar y Soltar.

Documentación de la propiedad Attached

Drag.active : bool [read-only]

Esta propiedad mantiene si una secuencia de eventos de arrastre está actualmente activa.

Vinculando esta propiedad a la propiedad active de MouseArea::drag hará que startDrag sea llamado cuando el usuario comience a arrastrar.

Establecer esta propiedad a true también enviará un evento QDragEnter a la escena con la posición actual del ítem. Establecerla a false enviará un evento QDragLeave.

Mientras un arrastre está activo cualquier cambio en la posición de un ítem enviará un evento QDragMove con la nueva posición del ítem a la escena.

Drag.dragType : enumeration

Esta propiedad indica si se deben iniciar automáticamente los arrastres, no hacer nada, o utilizar arrastres internos compatibles con versiones anteriores. El valor predeterminado es utilizar arrastres internos compatibles con versiones anteriores.

Un arrastre también puede iniciarse manualmente usando startDrag.

ConstanteDescripción
Drag.Noneno iniciar los arrastres automáticamente
Drag.Automaticiniciar los arrastres automáticamente
Drag.Internal(por defecto) iniciar automáticamente los arrastres compatibles con versiones anteriores

Cuando utilice Drag.Automatic también debe definir mimeData y vincular la propiedad active a la propiedad active de MouseArea: MouseArea::drag.active

Drag.hotSpot : point

Esta propiedad contiene la posición de arrastre relativa a la parte superior izquierda del elemento.

Por defecto es (0, 0).

Los cambios en el hotSpot desencadenan un nuevo movimiento de arrastre con la posición actualizada.

Drag.imageSource : url

Esta propiedad contiene la URL de la imagen que se utilizará para representar los datos durante la operación de arrastrar y soltar. Cambiar esta propiedad después de que la operación de arrastre haya comenzado no tendrá ningún efecto.

El ejemplo siguiente utiliza el contenido de un elemento como imagen de arrastre:

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

Véase también Item::grabToImage().

Drag.imageSourceSize : size [since 6.8]

Esta propiedad contiene el tamaño de la imagen que se utilizará para representar los datos durante la operación de arrastrar y soltar. Cambiar esta propiedad después de que la operación de arrastrar y soltar haya comenzado no tendrá ningún efecto.

Esta propiedad establece el número máximo de píxeles almacenados para la imagen cargada, de forma que las imágenes grandes no utilicen más memoria de la necesaria. Consulte Image.sourceSize para obtener más detalles.

El siguiente ejemplo muestra una imagen SVG renderizada a un tamaño, y la vuelve a renderizar a un tamaño diferente para la imagen de arrastre:

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

Esta propiedad se introdujo en Qt 6.8.

Véase también imageSource y Item::grabToImage().

Drag.keys : stringlist

Esta propiedad contiene una lista de teclas que pueden ser usadas por DropArea para filtrar eventos de arrastre.

Cambiar las teclas mientras un arrastre está activo reiniciará la secuencia de eventos de arrastre enviando un evento de salida de arrastre seguido de un evento de entrada de arrastre con la nueva fuente.

Drag.mimeData : var

Esta propiedad contiene un mapa del tipo mime a los datos que se utilizan durante startDrag. Los datos mime tienen que ser de un tipo que coincida con el tipo mime (por ejemplo, una cadena si el tipo mime es "text/plain", o una imagen si el tipo mime es "image/png"), o un ArrayBuffer con los datos codificados según el tipo mime.

Drag.proposedAction : enumeration

Esta propiedad contiene una acción recomendada por la fuente de arrastre como valor de retorno de Drag.drop().

Los cambios en proposedAction desencadenarán un evento move con la propuesta actualizada.

Drag.source : Object

Esta propiedad contiene un objeto que se identifica a los receptores de eventos de arrastre como la fuente de los eventos. Por defecto, este es el ítem al que se adjunta la propiedad Drag.

Cambiar el origen mientras un arrastre está activo reiniciará la secuencia de eventos de arrastre enviando un evento de salida de arrastre seguido de un evento de entrada de arrastre con el nuevo origen.

Drag.supportedActions : flags

Esta propiedad contiene los valores de Drag.drop() soportados por la fuente de arrastre.

Cambiar las supportedActions mientras un arrastre está activo reiniciará la secuencia de eventos de arrastre enviando un evento drag leave seguido de un evento drag enter con la nueva fuente.

Drag.target : Object

Mientras un arrastre está activo esta propiedad contiene el último objeto que aceptó un evento de entrada del ítem arrastrado, si la posición actual de arrastre no interseca ningún objetivo aceptante será null.

Cuando un arrastre no está activo esta propiedad contiene el objeto que aceptó el evento drop que finalizó el arrastre, si ningún objeto aceptó el drop o el arrastre fue cancelado el objetivo será nulo.

Documentación de la señal adjunta

dragFinished(DropAction dropAction)

Esta señal se emite cuando un arrastre finaliza y el arrastre se inició con el método startDrag() o se inició automáticamente utilizando la propiedad dragType.

dropAction contiene la acción aceptada por el elemento de destino.

Nota: El manejador correspondiente es onDragFinished.

Véase también drop().

dragStarted()

Esta señal se emite cuando se inicia un arrastre con el método startDrag() o cuando se inicia automáticamente utilizando la propiedad dragType.

Nota: El manejador correspondiente es onDragStarted.

Documentación del método Attached

void cancel()

Finaliza una secuencia de arrastre.

enumeration drop()

Finaliza una secuencia de arrastre enviando un evento de soltar al elemento de destino.

Devuelve la acción aceptada por el elemento de destino. Si el elemento de destino o uno de sus padres no acepta el evento de soltar, entonces se devolverá Qt.IgnoreAction.

La acción de soltar devuelta puede ser una de las siguientes

ConstanteDescripción
Qt.CopyActionCopiar los datos al destino
Qt.MoveActionMover los datos del origen al destino
Qt.LinkActionCrear un enlace desde el origen al destino.
Qt.IgnoreActionIgnorar la acción (no hacer nada con los datos).

void start(flags supportedActions)

Inicia el envío de eventos de arrastre. Se utiliza para iniciar arrastres internos del estilo antiguo. startDrag es el nuevo estilo, el método preferido para iniciar arrastres.

El argumento opcional supportedActions se puede utilizar para anular la propiedad supportedActions para la secuencia iniciada.

void startDrag(flags supportedActions)

Inicia el envío de eventos de arrastre.

El argumento opcional supportedActions se puede utilizar para anular la propiedad supportedActions para la secuencia iniciada.

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