En esta página

QDrag Class

La clase QDrag proporciona soporte para la transferencia de datos de arrastrar y soltar basada en MIME. Más...

Cabecera: #include <QDrag>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Hereda: QObject

Funciones públicas

QDrag(QObject *dragSource)
virtual ~QDrag()
Qt::DropAction defaultAction() const
QPixmap dragCursor(Qt::DropAction action) const
Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction)
Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
QPoint hotSpot() const
QMimeData *mimeData() const
QPixmap pixmap() const
void setDragCursor(const QPixmap &cursor, Qt::DropAction action)
void setHotSpot(const QPoint &hotspot)
void setMimeData(QMimeData *data)
void setPixmap(const QPixmap &pixmap)
QObject *source() const
Qt::DropActions supportedActions() const
QObject *target() const

Señales

void actionChanged(Qt::DropAction action)
void targetChanged(QObject *newTarget)

Miembros públicos estáticos

void cancel()

Descripción detallada

Arrastrar y soltar es una forma intuitiva para los usuarios de copiar o mover datos en una aplicación, y se utiliza en muchos entornos de escritorio como un mecanismo para copiar datos entre aplicaciones. El soporte de arrastrar y soltar en Qt se centra alrededor de la clase QDrag que maneja la mayoría de los detalles de una operación de arrastrar y soltar.

Los datos a ser transferidos por la operación de arrastrar y soltar están contenidos en un objeto QMimeData. Este se especifica con la función setMimeData() de la siguiente manera:

        QDrag *drag = new QDrag(this);
        QMimeData *mimeData = new QMimeData;

        mimeData->setText(commentEdit->toPlainText());
        drag->setMimeData(mimeData);

Observe que setMimeData() asigna la propiedad del objeto QMimeData al objeto QDrag. El QDrag debe ser construido en el heap con un padre QObject para asegurar que Qt pueda limpiar después de que la operación de arrastrar y soltar haya sido completada.

Se puede utilizar un pixmap para representar los datos mientras el arrastre está en progreso, y se moverá con el cursor hacia el objetivo de la operación de soltar. Este pixmap suele mostrar un icono que representa el tipo MIME de los datos que se están transfiriendo, pero se puede establecer cualquier pixmap con setPixmap(). Al punto caliente del cursor se le puede dar una posición relativa a la esquina superior izquierda del pixmap con la función setHotSpot(). El siguiente código posiciona el pixmap de forma que el punto caliente del cursor apunte al centro de su borde inferior:

    drag->setHotSpot(QPoint(drag->pixmap().width()/2,
                            drag->pixmap().height()));

Nota: En X11, es posible que el mapa de píxeles no pueda seguir los movimientos del ratón si el punto caliente hace que el mapa de píxeles se muestre directamente debajo del cursor.

Los widgets de origen y destino se pueden encontrar con source() y target(). Estas funciones se utilizan a menudo para determinar si las operaciones de arrastrar y soltar comenzaron y terminaron en el mismo widget, de modo que se pueda implementar un comportamiento especial.

QDrag sólo se ocupa de la operación de arrastrar y soltar en sí. Depende del desarrollador decidir cuándo comienza una operación de arrastre, y cómo debe construirse y usarse un objeto QDrag. Para un widget dado, a menudo es necesario reimplementar mousePressEvent() para determinar si el usuario ha pulsado un botón del ratón, y reimplementar mouseMoveEvent() para comprobar si se requiere un QDrag.

Ver también Arrastrar y Soltar, QClipboard, QMimeData, Ejemplo de Iconos Arrastrables, Ejemplo de Texto Arrastrable, y Ejemplo de Drop Site.

Documentación de funciones miembro

[explicit] QDrag::QDrag(QObject *dragSource)

Construye un nuevo objeto de arrastre para el widget especificado por dragSource.

[virtual noexcept] QDrag::~QDrag()

Destruye el objeto de arrastre.

[signal] void QDrag::actionChanged(Qt::DropAction action)

Esta señal se emite cuando cambia el action asociado al arrastre.

Véase también targetChanged().

[static] void QDrag::cancel()

Cancela una operación de arrastre iniciada por Qt.

Nota: Esto está actualmente implementado en Windows y X11.

Véase también exec().

Qt::DropAction QDrag::defaultAction() const

Devuelve la acción de soltar propuesta por defecto para esta operación de arrastre.

Véase también exec() y supportedActions().

QPixmap QDrag::dragCursor(Qt::DropAction action) const

Devuelve el cursor de arrastre de action.

Véase también setDragCursor().

Qt::DropAction QDrag::exec(Qt::DropActions supportedActions = Qt::MoveAction)

Inicia la operación de arrastrar y soltar y devuelve un valor que indica la acción de soltar solicitada cuando finaliza. Las acciones de soltar entre las que el usuario puede elegir se especifican en supportedActions. Se seleccionará la acción propuesta por defecto entre las acciones permitidas en el siguiente orden: Mover, Copiar y Enlazar.

Nota: En Linux y macOS, la operación de arrastrar y soltar puede tardar algún tiempo, pero esta función no bloquea el bucle de eventos. Otros eventos siguen llegando a la aplicación mientras se realiza la operación. En Windows, el bucle de eventos de Qt se bloquea durante la operación.

Véase también cancel().

Qt::DropAction QDrag::exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)

Inicia la operación de arrastrar y soltar y devuelve un valor que indica la acción de soltar solicitada cuando finaliza. Las acciones de soltar entre las que puede elegir el usuario se especifican en supportedActions.

La dirección defaultDropAction determina qué acción se propondrá cuando el usuario realice un arrastre sin utilizar teclas modificadoras.

Nota: En Linux y macOS, la operación de arrastrar y soltar puede tardar algún tiempo, pero esta función no bloquea el bucle de eventos. Otros eventos siguen llegando a la aplicación mientras se realiza la operación. En Windows, el bucle de eventos de Qt se bloquea durante la operación. Sin embargo, QDrag::exec() en Windows hace que processEvents() sea llamada frecuentemente para mantener la respuesta de la GUI. Si se llama a cualquier bucle u operación mientras una operación de arrastre está activa, se bloqueará la operación de arrastre.

QPoint QDrag::hotSpot() const

Devuelve la posición del punto caliente respecto a la esquina superior izquierda del cursor.

Véase también setHotSpot().

QMimeData *QDrag::mimeData() const

Devuelve los datos MIME encapsulados por el objeto de arrastre.

Véase también setMimeData().

QPixmap QDrag::pixmap() const

Devuelve el pixmap utilizado para representar los datos en una operación de arrastrar y soltar.

Véase también setPixmap().

void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)

Establece el arrastre cursor para el action. Esto le permite anular los cursores nativos por defecto. Para volver a utilizar el cursor nativo para action pase un QPixmap nulo como cursor.

Nota: la configuración del cursor de arrastre para IgnoreAction puede no funcionar en todas las plataformas. Se ha comprobado que funciona en X11 y macOS. Windows no lo soporta.

Véase también dragCursor().

void QDrag::setHotSpot(const QPoint &hotspot)

Establece la posición del punto caliente en relación con la esquina superior izquierda del mapa de píxeles utilizado en el punto especificado por hotspot.

Nota: en X11, es posible que el mapa de píxeles no pueda seguir los movimientos del ratón si el punto caliente hace que el mapa de píxeles se muestre directamente bajo el cursor.

Véase también hotSpot().

void QDrag::setMimeData(QMimeData *data)

Establece los datos que se enviarán al MIME data. La propiedad de los datos se transfiere al objeto QDrag.

Véase también mimeData().

void QDrag::setPixmap(const QPixmap &pixmap)

Establece pixmap como el pixmap utilizado para representar los datos en una operación de arrastrar y soltar. Sólo se puede establecer un pixmap antes de que se inicie el arrastre.

Véase también pixmap().

QObject *QDrag::source() const

Devuelve el origen del objeto de arrastre. Se trata del widget en el que se originó la operación de arrastrar y soltar.

Qt::DropActions QDrag::supportedActions() const

Devuelve el conjunto de posibles acciones de soltar para esta operación de arrastre.

Véase también exec() y defaultAction().

QObject *QDrag::target() const

Devuelve el destino de la operación de arrastrar y soltar. Se trata del widget en el que se soltó el objeto arrastrado.

[signal] void QDrag::targetChanged(QObject *newTarget)

Esta señal se emite cuando cambia el destino de la operación de arrastrar y soltar, siendo newTarget el nuevo destino.

Véase también target() y actionChanged().

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