Auf dieser Seite

QDrag Class

Die Klasse „QDrag“ bietet Unterstützung für die MIME-basierte Datenübertragung per Drag & Drop. Mehr...

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

Öffentliche Funktionen

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

Signale

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

Statische öffentliche Mitglieder

void cancel()

Ausführliche Beschreibung

Drag & Drop ist eine intuitive Methode für Benutzer, Daten innerhalb einer Anwendung zu kopieren oder zu verschieben, und wird in vielen Desktop-Umgebungen als Mechanismus zum Kopieren von Daten zwischen Anwendungen verwendet. Die Drag & Drop-Unterstützung in Qt basiert auf der Klasse `QDrag`, die den Großteil der Details einer Drag & Drop-Operation übernimmt.

Die durch den Drag-and-Drop-Vorgang zu übertragenden Daten sind in einem ` QMimeData `-Objekt enthalten. Dieses wird mit der Funktion ` setMimeData()` wie folgt festgelegt:

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

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

Beachten Sie, dass ` setMimeData()` die Eigentumsrechte am ` QMimeData `-Objekt dem `QDrag`-Objekt überträgt. Das `QDrag`-Objekt muss auf dem Heap mit einem übergeordneten ` QObject ` instanziiert werden, um sicherzustellen, dass Qt nach Abschluss des Drag-and-Drop-Vorgangs die Ressourcen bereinigen kann.

Zur Darstellung der Daten während des Drag-Vorgangs kann eine Pixmap verwendet werden, die sich gemeinsam mit dem Cursor zum Ablageziel bewegt. Diese Pixmap zeigt typischerweise ein Symbol, das den MIME-Typ der übertragenen Daten darstellt; mit ` setPixmap()` kann jedoch beliebige Pixmap festgelegt werden. Der Hotspot des Cursors kann mit der Funktion „ setHotSpot()“ relativ zur oberen linken Ecke der Pixmap positioniert werden. Der folgende Code positioniert die Pixmap so, dass der Hotspot des Cursors auf die Mitte ihrer unteren Kante zeigt:

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

Hinweis: Unter X11 kann es vorkommen, dass die Pixmap den Mausbewegungen nicht folgen kann, wenn der Hotspot dazu führt, dass die Pixmap direkt unter dem Cursor angezeigt wird.

Die Quell- und Ziel-Widgets lassen sich mit ` source()` und ` target()` ermitteln. Diese Funktionen werden häufig verwendet, um festzustellen, ob Drag-and-Drop-Vorgänge am selben Widget begonnen und beendet wurden, sodass ein spezielles Verhalten implementiert werden kann.

QDrag befasst sich ausschließlich mit der Drag-and-Drop-Operation selbst. Es liegt im Ermessen des Entwicklers, zu entscheiden, wann eine Drag-Operation beginnt und wie ein QDrag-Objekt erstellt und verwendet werden soll. Für ein bestimmtes Widget ist es oft notwendig, die Funktion ` mousePressEvent()` neu zu implementieren, um festzustellen, ob der Benutzer eine Maustaste gedrückt hat, und die Funktion ` mouseMoveEvent()` neu zu implementieren, um zu prüfen, ob ein `QDrag` erforderlich ist.

Siehe auch „Drag & Drop“, „ QClipboard “, „ QMimeData “, „Beispiel für verschiebbare Symbole“, „Beispiel für verschiebbaren Text“ und „Beispiel für eine Ablageposition“.

Dokumentation zu den Member-Funktionen

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

Erstellt ein neues Drag-Objekt für das durch ` dragSource` angegebene Widget.

[virtual noexcept] QDrag::~QDrag()

Löscht das Drag-Objekt.

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

Dieses Signal wird ausgelöst, wenn sich das mit dem Drag verbundene „ action “ ändert.

Siehe auch „ targetChanged()“.

[static] void QDrag::cancel()

Bricht einen von Qt initiierten Drag-Vorgang ab.

Hinweis: Dies ist derzeit unter Windows und X11 implementiert.

Siehe auch ` exec()`.

Qt::DropAction QDrag::defaultAction() const

Gibt die standardmäßig vorgeschlagene Ablegeaktion für diesen Drag-Vorgang zurück.

Siehe auch exec() und supportedActions().

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

Gibt den Drag-Cursor für die „ action “ zurück.

Siehe auch setDragCursor().

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

Startet den Drag-and-Drop-Vorgang und gibt nach dessen Abschluss einen Wert zurück, der die angeforderte Ablegeaktion angibt. Die Ablegeaktionen, aus denen der Benutzer wählen kann, sind unter supportedActions aufgeführt. Die standardmäßig vorgeschlagene Aktion wird in der folgenden Reihenfolge aus den zulässigen Aktionen ausgewählt: Verschieben, Kopieren und Verknüpfen.

Hinweis: Unter Linux und macOS kann der Drag-and-Drop-Vorgang einige Zeit in Anspruch nehmen, diese Funktion blockiert jedoch nicht die Ereignisschleife. Andere Ereignisse werden während der Ausführung des Vorgangs weiterhin an die Anwendung weitergeleitet. Unter Windows wird die Qt-Ereignisschleife während des Vorgangs blockiert.

Siehe auch cancel().

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

Startet den Drag-and-Drop-Vorgang und gibt nach dessen Abschluss einen Wert zurück, der die angeforderte Ablegeaktion angibt. Die Ablegeaktionen, aus denen der Benutzer wählen kann, sind in „ supportedActions “ festgelegt.

Die ` defaultDropAction ` legt fest, welche Aktion vorgeschlagen wird, wenn der Benutzer einen Drag-Vorgang ohne Verwendung von Modifikatortasten durchführt.

Hinweis: Unter Linux und macOS kann der Drag-and-Drop-Vorgang einige Zeit in Anspruch nehmen, doch diese Funktion blockiert die Ereignisschleife nicht. Andere Ereignisse werden der Anwendung weiterhin übermittelt, während der Vorgang ausgeführt wird. Unter Windows wird die Qt-Ereignisschleife während des Vorgangs blockiert. Allerdings bewirkt „ QDrag::exec()“ unter Windows, dass „processEvents()“ häufig aufgerufen wird, um die Reaktionsfähigkeit der Benutzeroberfläche aufrechtzuerhalten. Werden während eines aktiven Drag-Vorgangs Schleifen oder Operationen aufgerufen, blockieren diese den Drag-Vorgang.

QPoint QDrag::hotSpot() const

Gibt die Position des Hotspots relativ zur oberen linken Ecke des Cursors zurück.

Siehe auch „ setHotSpot()“.

QMimeData *QDrag::mimeData() const

Gibt die MIME-Daten zurück, die vom Drag-Objekt gekapselt sind.

Siehe auch ` setMimeData()`.

QPixmap QDrag::pixmap() const

Gibt die Pixmap zurück, die zur Darstellung der Daten bei einem Drag-and-Drop-Vorgang verwendet wird.

Siehe auch „ setPixmap()“.

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

Legt die Drag- cursor en für „ action “ fest. Auf diese Weise können Sie die standardmäßigen nativen Cursor überschreiben. Um wieder den nativen Cursor für „ action “ zu verwenden, übergeben Sie einen Null- QPixmap als „ cursor “.

Hinweis: Das Festlegen des Drag-Cursors für `IgnoreAction` funktioniert möglicherweise nicht auf allen Plattformen. Unter X11 und macOS wurde die Funktion getestet und funktioniert. Windows unterstützt dies nicht.

Siehe auch ` dragCursor()`.

void QDrag::setHotSpot(const QPoint &hotspot)

Legt die Position des Hotspots relativ zur oberen linken Ecke der verwendeten Pixmap auf den durch ` hotspot` angegebenen Punkt fest.

Hinweis: Unter X11 kann es vorkommen, dass die Pixmap den Mausbewegungen nicht folgen kann, wenn der Hotspot dazu führt, dass die Pixmap direkt unter dem Cursor angezeigt wird.

Siehe auch hotSpot().

void QDrag::setMimeData(QMimeData *data)

Legt die Daten fest, die an die angegebene MIME- data gesendet werden sollen. Die Eigentumsrechte an den Daten werden auf das QDrag -Objekt übertragen.

Siehe auch mimeData().

void QDrag::setPixmap(const QPixmap &pixmap)

Legt „ pixmap “ als Pixmap fest, die zur Darstellung der Daten bei einem Drag-and-Drop-Vorgang verwendet wird. Eine Pixmap kann nur vor Beginn des Drag-Vorgangs festgelegt werden.

Siehe auch pixmap().

QObject *QDrag::source() const

Gibt die Quelle des Drag-Objekts zurück. Dabei handelt es sich um das Widget, von dem aus der Drag-and-Drop-Vorgang gestartet wurde.

Qt::DropActions QDrag::supportedActions() const

Gibt die Menge der möglichen Ablageaktionen für diesen Drag-Vorgang zurück.

Siehe auch exec() und defaultAction().

QObject *QDrag::target() const

Gibt das Ziel der Drag-and-Drop-Operation zurück. Dabei handelt es sich um das Widget, in dem das gezogene Objekt abgelegt wurde.

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

Dieses Signal wird ausgelöst, wenn sich das Ziel des Drag-and-Drop-Vorgangs ändert, wobei newTarget das neue Ziel ist.

Siehe auch target() und 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.