Sur cette page

QDrag Class

La classe QDrag prend en charge le transfert de données par glisser-déposer basé sur MIME. Plus d'informations...

En-tête : #include <QDrag>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui
Héritages : QObject

Fonctions publiques

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

Signaux

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

Membres publics statiques

void cancel()

Description détaillée

Le glisser-déposer est un moyen intuitif pour les utilisateurs de copier ou de déplacer des données dans une application, et il est utilisé dans de nombreux environnements de bureau comme mécanisme de copie de données entre applications. La prise en charge du glisser-déposer dans Qt est centrée sur la classe QDrag, qui gère la plupart des détails d'une opération de glisser-déposer.

Les données à transférer par l'opération de glisser-déposer sont contenues dans un objet QMimeData. Celui-ci est spécifié avec la fonction setMimeData() de la manière suivante :

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

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

Notez que la fonction setMimeData() attribue la propriété de l'objet QMimeData à l'objet QDrag. Le QDrag doit être construit sur le tas avec un parent QObject pour garantir que Qt peut nettoyer une fois l'opération de glisser-déposer terminée.

Un pixmap peut être utilisé pour représenter les données pendant que le glisser-déposer est en cours, et se déplacera avec le curseur jusqu'à la cible du glisser-déposer. Cette pixmap affiche généralement une icône représentant le type MIME des données transférées, mais n'importe quelle pixmap peut être définie à l'aide de setPixmap(). Le point chaud du curseur peut être positionné par rapport au coin supérieur gauche de la pixmap à l'aide de la fonction setHotSpot(). Le code suivant positionne la pixmap de manière à ce que le point chaud du curseur soit au centre de son bord inférieur :

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

Remarque : sous X11, la pixmap peut ne pas suivre les mouvements de la souris si le point chaud entraîne l'affichage de la pixmap directement sous le curseur.

Les widgets source et cible peuvent être trouvés avec source() et target(). Ces fonctions sont souvent utilisées pour déterminer si les opérations de glisser-déposer ont commencé et se sont terminées dans le même widget, de sorte qu'un comportement particulier puisse être mis en œuvre.

QDrag ne s'occupe que de l'opération de glisser-déposer elle-même. C'est au développeur de décider quand une opération de glisser-déposer commence, et comment un objet QDrag doit être construit et utilisé. Pour un widget donné, il est souvent nécessaire de réimplémenter mousePressEvent() pour déterminer si l'utilisateur a appuyé sur un bouton de la souris, et de réimplémenter mouseMoveEvent() pour vérifier si un QDrag est nécessaire.

Voir aussi Drag and Drop, QClipboard, QMimeData, Draggable Icons Example, Draggable Text Example, et Drop Site Example.

Documentation sur les fonctions membres

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

Construit un nouvel objet drag pour le widget spécifié par dragSource.

[virtual noexcept] QDrag::~QDrag()

Détruit l'objet dragué.

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

Ce signal est émis lorsque le site action associé au drag change.

Voir également targetChanged().

[static] void QDrag::cancel()

Annule une opération de glissement initiée par Qt.

Note : Ceci est actuellement implémenté sous Windows et X11.

Voir également exec().

Qt::DropAction QDrag::defaultAction() const

Renvoie l'action de dépôt proposée par défaut pour cette opération de déplacement.

Voir aussi exec() et supportedActions().

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

Renvoie le curseur de déplacement pour le site action.

Voir aussi setDragCursor().

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

Lance l'opération de glisser-déposer et renvoie une valeur indiquant l'action de dépôt demandée lorsqu'elle est terminée. Les actions de dépôt que l'utilisateur peut choisir sont spécifiées à l'adresse supportedActions. L'action proposée par défaut sera sélectionnée parmi les actions autorisées dans l'ordre suivant : Déplacer, Copier et Lier.

Remarque : sous Linux et macOS, l'opération de glisser-déposer peut prendre un certain temps, mais cette fonction ne bloque pas la boucle d'événements. D'autres événements sont toujours transmis à l'application pendant que l'opération est effectuée. Sous Windows, la boucle d'événements de Qt est bloquée pendant l'opération.

Voir aussi cancel().

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

Lance l'opération de glisser-déposer et renvoie une valeur indiquant l'action de dépôt demandée lorsqu'elle est terminée. Les actions de dépôt que l'utilisateur peut choisir sont spécifiées à l'adresse supportedActions.

Le site defaultDropAction détermine l'action qui sera proposée lorsque l'utilisateur effectue un glisser-déposer sans utiliser de touches de modification.

Remarque : sous Linux et macOS, l'opération de glisser-déposer peut prendre un certain temps, mais cette fonction ne bloque pas la boucle d'événements. D'autres événements sont toujours transmis à l'application pendant que l'opération est effectuée. Sous Windows, la boucle d'événements Qt est bloquée pendant l'opération. Cependant, QDrag::exec() sous Windows provoque l'appel fréquent de processEvents() pour maintenir la réactivité de l'interface graphique. Si des boucles ou des opérations sont appelées alors qu'une opération de glissement est active, l'opération de glissement sera bloquée.

QPoint QDrag::hotSpot() const

Renvoie la position du point chaud par rapport au coin supérieur gauche du curseur.

Voir aussi setHotSpot().

QMimeData *QDrag::mimeData() const

Renvoie les données MIME encapsulées dans l'objet drag.

Voir aussi setMimeData().

QPixmap QDrag::pixmap() const

Renvoie la pixmap utilisée pour représenter les données lors d'une opération de glisser-déposer.

Voir aussi setPixmap().

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

Définit le curseur de déplacement cursor pour action. Cela vous permet d'ignorer les curseurs natifs par défaut. Pour revenir à l'utilisation du curseur natif pour action, passez une valeur nulle à QPixmap en tant que cursor.

Remarque : la configuration du curseur de glissement pour IgnoreAction peut ne pas fonctionner sur toutes les plates-formes. X11 et macOS ont été testés pour fonctionner. Windows ne le prend pas en charge.

Voir aussi dragCursor().

void QDrag::setHotSpot(const QPoint &hotspot)

Définit la position du point chaud par rapport au coin supérieur gauche de la pixmap utilisée au point spécifié par hotspot.

Note : sur X11, la pixmap peut ne pas être capable de suivre les mouvements de la souris si le point chaud entraîne l'affichage de la pixmap directement sous le curseur.

Voir aussi hotSpot().

void QDrag::setMimeData(QMimeData *data)

Définit les données à envoyer au MIME donné data. La propriété des données est transférée à l'objet QDrag.

Voir aussi mimeData().

void QDrag::setPixmap(const QPixmap &pixmap)

Définit pixmap comme la pixmap utilisée pour représenter les données lors d'une opération de glisser-déposer. Vous ne pouvez définir une pixmap qu'avant le début de l'opération de glisser-déposer.

Voir aussi pixmap().

QObject *QDrag::source() const

Renvoie la source de l'objet glissé. Il s'agit du widget à l'origine de l'opération de glisser-déposer.

Qt::DropActions QDrag::supportedActions() const

Renvoie l'ensemble des actions de dépôt possibles pour cette opération de glisser-déposer.

Voir aussi exec() et defaultAction().

QObject *QDrag::target() const

Renvoie la cible de l'opération de glisser-déposer. Il s'agit du widget dans lequel l'objet a été déposé.

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

Ce signal est émis lorsque la cible de l'opération de glisser-déposer change, newTarget étant la nouvelle cible.

Voir également target() et 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.