QDrag Class
Die Klasse QDrag bietet Unterstützung für MIME-basierte Drag-and-Drop-Datenübertragung. Mehr...
Kopfzeile: | #include <QDrag> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
Vererbungen: | 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() |
Detaillierte Beschreibung
Ziehen und Ablegen ist eine intuitive Möglichkeit für Benutzer, Daten in einer Anwendung zu kopieren oder zu verschieben, und wird in vielen Desktop-Umgebungen als Mechanismus zum Kopieren von Daten zwischen Anwendungen verwendet. Die Drag-and-Drop-Unterstützung in Qt konzentriert sich auf die Klasse QDrag, die die meisten Details einer Drag-and-Drop-Operation handhabt.
Die Daten, die durch die Drag-and-Drop-Operation übertragen werden, sind in einem QMimeData Objekt enthalten. Dieses wird mit der Funktion setMimeData() auf die folgende Weise spezifiziert:
QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mimeData->setText(commentEdit->toPlainText()); drag->setMimeData(mimeData);
Beachten Sie, dass setMimeData() dem QDrag-Objekt den Besitz des QMimeData -Objekts zuweist. Das QDrag muss auf dem Heap mit einem übergeordneten QObject konstruiert werden, um sicherzustellen, dass Qt nach Abschluss der Drag&Drop-Operation aufräumen kann.
Eine Pixmap kann verwendet werden, um die Daten während des Ziehens darzustellen, und bewegt sich mit dem Cursor zum Ziel. Diese Pixmap zeigt normalerweise ein Symbol, das den MIME-Typ der zu übertragenden Daten darstellt, aber mit setPixmap() kann jede beliebige Pixmap festgelegt werden. Dem Hotspot des Cursors kann mit der Funktion setHotSpot() eine Position relativ zur linken oberen Ecke der Pixmap gegeben werden. Der folgende Code positioniert die Pixmap so, dass der Hotspot des Cursors auf die Mitte der unteren Kante zeigt:
drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height()));
Hinweis: Unter X11 kann die Pixmap möglicherweise nicht mit den Mausbewegungen Schritt halten, wenn der Hotspot dazu führt, dass die Pixmap direkt unter dem Mauszeiger angezeigt wird.
Die Quell- und Ziel-Widgets können mit source() und target() gefunden werden. Diese Funktionen werden oft verwendet, um festzustellen, ob Drag- und Drop-Operationen am selben Widget begonnen und beendet wurden, so dass ein spezielles Verhalten implementiert werden kann.
QDrag befasst sich nur mit der Drag&Drop-Operation selbst. Es ist Sache des Entwicklers, zu entscheiden, wann eine Drag-Operation beginnt und wie ein QDrag-Objekt konstruiert und verwendet werden soll. Für ein bestimmtes Widget ist es oft notwendig, mousePressEvent() neu zu implementieren, um festzustellen, ob der Benutzer eine Maustaste gedrückt hat, und mouseMoveEvent() neu zu implementieren, um zu prüfen, ob ein QDrag erforderlich ist.
Siehe auch Drag and Drop, QClipboard, QMimeData, Draggable Icons Example, Draggable Text Example, und Drop Site Example.
Dokumentation der Mitgliedsfunktionen
[explicit]
QDrag::QDrag(QObject *dragSource)
Konstruiert ein neues Drag-Objekt für das durch dragSource angegebene Widget.
[virtual noexcept]
QDrag::~QDrag()
Zerstört das Drag-Objekt.
[signal]
void QDrag::actionChanged(Qt::DropAction action)
Dieses Signal wird ausgegeben, wenn sich die mit dem Ziehen verbundene action ändert.
Siehe auch targetChanged().
[static]
void QDrag::cancel()
Bricht eine von Qt initiierte Ziehoperation ab.
Hinweis: Dies ist derzeit unter Windows und X11 implementiert.
Siehe auch exec().
Qt::DropAction QDrag::defaultAction() const
Gibt die standardmäßig vorgeschlagene Drop-Aktion für diesen Ziehvorgang zurück.
Siehe auch exec() und supportedActions().
QPixmap QDrag::dragCursor(Qt::DropAction action) const
Liefert den Schleppzeiger für action.
Siehe auch setDragCursor().
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions = Qt::MoveAction)
Startet den Drag&Drop-Vorgang und gibt einen Wert zurück, der die angeforderte Drop-Aktion angibt, wenn sie abgeschlossen ist. Die Drop-Aktionen, aus denen der Benutzer wählen kann, sind unter supportedActions angegeben. Die standardmäßig vorgeschlagene Aktion wird aus den zulässigen Aktionen in der folgenden Reihenfolge ausgewählt: Verschieben, Kopieren und Verknüpfen.
Hinweis: Unter Linux und macOS kann der Drag&Drop-Vorgang einige Zeit in Anspruch nehmen, aber diese Funktion blockiert die Ereignisschleife nicht. Andere Ereignisse werden weiterhin an die Anwendung geliefert, während der Vorgang ausgeführt wird. 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&Drop-Vorgang und gibt einen Wert zurück, der die angeforderte Drop-Aktion angibt, wenn sie abgeschlossen ist. Die Drop-Aktionen, aus denen der Benutzer wählen kann, sind in supportedActions angegeben.
Die defaultDropAction legt fest, welche Aktion vorgeschlagen wird, wenn der Benutzer einen Ziehvorgang durchführt, ohne Modifizierungstasten zu verwenden.
Hinweis: Unter Linux und macOS kann der Drag&Drop-Vorgang einige Zeit in Anspruch nehmen, aber diese Funktion blockiert die Ereignisschleife nicht. Andere Ereignisse werden weiterhin an die Anwendung geliefert, 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 GUI ansprechbar zu halten. Wenn irgendwelche Schleifen oder Operationen aufgerufen werden, während ein Ziehvorgang aktiv ist, wird der Ziehvorgang dadurch blockiert.
QPoint QDrag::hotSpot() const
Gibt die Position des Hotspots relativ zur linken oberen Ecke des Cursors zurück.
Siehe auch setHotSpot().
QMimeData *QDrag::mimeData() const
Gibt die MIME-Daten zurück, die durch das Drag-Objekt gekapselt sind.
Siehe auch setMimeData().
QPixmap QDrag::pixmap() const
Gibt die Pixmap zurück, die zur Darstellung der Daten bei einem Drag&Drop-Vorgang verwendet wird.
Siehe auch setPixmap().
void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)
Legt den Drag cursor für action fest. Damit können Sie die standardmäßigen nativen Cursors außer Kraft setzen. Wenn Sie wieder den nativen Cursor für action verwenden möchten, geben Sie eine Null QPixmap als cursor ein.
Hinweis: Die Einstellung des Drag-Cursors für IgnoreAction funktioniert möglicherweise nicht auf allen Plattformen. X11 und macOS wurden auf ihre Funktionsfähigkeit getestet. Windows unterstützt dies nicht.
Siehe auch dragCursor().
void QDrag::setHotSpot(const QPoint &hotspot)
Setzt die Position des Hotspots relativ zur linken oberen Ecke der verwendeten Pixmap auf den durch hotspot angegebenen Punkt.
Hinweis: Unter X11 kann die Pixmap möglicherweise nicht mit den Mausbewegungen Schritt halten, wenn der Hotspot dazu führt, dass die Pixmap direkt unter dem Mauszeiger angezeigt wird.
Siehe auch hotSpot().
void QDrag::setMimeData(QMimeData *data)
Legt die Daten fest, die an das angegebene MIME data gesendet werden sollen. Das Eigentum an den Daten wird an das Objekt QDrag übertragen.
Siehe auch mimeData().
void QDrag::setPixmap(const QPixmap &pixmap)
Legt pixmap als Pixmap fest, die zur Darstellung der Daten bei einem Drag&Drop-Vorgang verwendet wird. Sie können eine Pixmap nur festlegen, bevor der Ziehvorgang gestartet wird.
Siehe auch pixmap().
QObject *QDrag::source() const
Gibt die Quelle des Drag-Objekts zurück. Dies ist das Widget, von dem der Drag&Drop-Vorgang ausging.
Qt::DropActions QDrag::supportedActions() const
Gibt die Menge der möglichen Drop-Aktionen für diesen Ziehvorgang zurück.
Siehe auch exec() und defaultAction().
QObject *QDrag::target() const
Gibt das Ziel des Ziehen-und-Ablegen-Vorgangs zurück. Dies ist das Widget, in dem das Drag-Objekt abgelegt wurde.
[signal]
void QDrag::targetChanged(QObject *newTarget)
Dieses Signal wird ausgegeben, wenn sich das Ziel des Drag&Drop-Vorgangs ändert, wobei newTarget das neue Ziel ist.
Siehe auch target() und actionChanged().
© 2025 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.