Sur cette page

QDrag Class

La classe QDrag prend en charge le transfert de données par glisser-déposer selon le protocole MIME. En savoir plus...

En-tête : #include <QDrag>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui
Hérite de : 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 au sein d’une application ; 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 s’articule autour de 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é à l’aide de 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`. L'objet `QDrag` doit être instancié sur le tas avec un parent de type ` QObject ` afin de garantir que Qt puisse procéder au nettoyage une fois l'opération de glisser-déposer terminée.

Une image bitmap peut être utilisée pour représenter les données pendant le glissement ; elle se déplacera alors avec le curseur jusqu’à la cible de dépôt. Cette image bitmap affiche généralement une icône représentant le type MIME des données transférées, mais n’importe quelle image bitmap peut être définie à l’aide de setPixmap(). La zone active du curseur peut se voir attribuer une position relative au coin supérieur gauche du pixmap à l’aide de la fonction ` setHotSpot()`. Le code suivant positionne le pixmap de manière à ce que la zone active du curseur pointe vers le centre de son bord inférieur :

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

Remarque : sous X11, il se peut que la carte de pixels ne parvienne pas à suivre les mouvements de la souris si la zone sensible entraîne l’affichage de la carte de pixels directement sous le curseur.

Les widgets source et cible peuvent être identifiés à l’aide des fonctions ` 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 sur le même widget, ce qui permet de mettre en œuvre un comportement spécifique.

QDrag ne gère que l’opération de glisser-déposer en 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()` afin de déterminer si l’utilisateur a cliqué sur un bouton de souris, et de réimplémenter ` mouseMoveEvent()` pour vérifier si un objet `QDrag` est nécessaire.

Voir également Glisser-déposer, QClipboard, QMimeData, Exemple d’icônes déplaçables, Exemple de texte déplaçable et Exemple d’emplacement de dépôt.

Documentation des fonctions membres

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

Crée un nouvel objet de glisser-déposer pour le widget spécifié par ` dragSource`.

[virtual noexcept] QDrag::~QDrag()

Supprime l'objet de glisser-déposer.

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

Ce signal est émis lorsque l'action e associée à la traînée change.

Voir aussi targetChanged().

[static] void QDrag::cancel()

Annule une opération de glisser-déposer lancée par Qt.

Remarque : cette fonctionnalité est actuellement implémentée sous Windows et X11.

Voir aussi exec().

Qt::DropAction QDrag::defaultAction() const

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

Voir également exec() et supportedActions().

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

Renvoie le curseur de glisser-déposer de l'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 une fois celle-ci terminée. Les actions de dépôt parmi lesquelles l'utilisateur peut choisir sont spécifiées dans ` 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 l'exécution de l'opération. Sous Windows, la boucle d'événements Qt est bloquée pendant l'opération.

Voir également 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 une fois celle-ci terminée. Les actions de dépôt parmi lesquelles l'utilisateur peut choisir sont spécifiées dans ` supportedActions`.

La méthode ` defaultDropAction ` détermine quelle action sera proposée lorsque l'utilisateur effectue un glissement 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 continuent d'être transmis à l'application pendant l'exécution de l'opération. Sous Windows, la boucle d’événements Qt est bloquée pendant l’opération. Cependant, la fonction QDrag::exec() sous Windows provoque l’appel fréquent de processEvents() afin de maintenir la réactivité de l’interface graphique. Si des boucles ou des opérations sont appelées alors qu’une opération de glisser-déposer est en cours, cela bloquera cette opération.

QPoint QDrag::hotSpot() const

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

Voir aussi setHotSpot().

QMimeData *QDrag::mimeData() const

Renvoie les données MIME encapsulées par l'objet de glisser-déposer.

Voir aussi setMimeData().

QPixmap QDrag::pixmap() const

Renvoie la carte de pixels 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 l’ cursor de glisser-déposer pour l’ action. Cela vous permet de remplacer les curseurs natifs par défaut. Pour revenir à l’utilisation du curseur natif pour action, transmettez une QPixmap nulle en tant que cursor.

Remarque : la configuration du curseur de glissement pour IgnoreAction peut ne pas fonctionner sur toutes les plateformes. Son fonctionnement a été testé sous X11 et macOS. Windows ne le prend pas en charge.

Voir également dragCursor().

void QDrag::setHotSpot(const QPoint &hotspot)

Définit la position de la zone sensible par rapport au coin supérieur gauche de l'image utilisée, au point spécifié par hotspot.

Remarque : sous X11, il se peut que la carte de pixels ne parvienne pas à suivre les mouvements de la souris si la zone sensible entraîne l'affichage de la carte de pixels directement sous le curseur.

Voir également hotSpot().

void QDrag::setMimeData(QMimeData *data)

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

Voir également mimeData().

void QDrag::setPixmap(const QPixmap &pixmap)

Définit ` pixmap ` comme image pixel (pixmap) utilisée pour représenter les données lors d'une opération de glisser-déposer. Vous ne pouvez définir une image pixel qu'avant le début du glissement.

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 également 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 glissé 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, la nouvelle cible étant newTarget.

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.