Wie implementiert man ein Drag-and-Drop-Widget in einen anderen Container in qt?[geschlossen]

StackOverflow https://stackoverflow.com//questions/20002566

  •  20-12-2019
  •  | 
  •  

Frage

Ich habe ein Fenster mit mehreren Containern.Was ist der einfachste Weg, Drag-and-Drop zwischen ihnen zu implementieren?

War es hilfreich?

Lösung

Sie müssen a verwenden QDrag* Objekt.Dann erneut implementieren:

virtual void mousePressEvent(QMouseEvent * event);
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent *event);

Innerhalb dieser Ereignisse verwalten Sie einen Startpunkt (wo das Ziehen beginnt) und einen Endpunkt (wo Sie das Widget ablegen).Sie werden auch das MIME-Protokoll verwenden, um dem Framework die Verwaltung des Drag-and-Drop-Vorgangs zu ermöglichen.

Ein nützlicherer Artikel zum Thema Drag & Drop ist dieser: Ziehen und loslassen

Andere Tipps

Der einfachste Weg wäre wohl das Erstellen eventFilter Klasse, in der Sie Drag-and-Drop-Ereignisse filtern würden und Installieren Es (someWidget->installEventFilter) auf alle Ihre Widgets, wohin Sie sie per Drag & Drop verschieben möchten.Beispiel aus Dokumenten – Hier

aktualisieren:

Die Sache mit Eventfilter ist, dass Sie nicht alle Ihre Widgets in Unterklassen unterteilen müssen, damit sie per Drag & Drop funktionieren.Installieren Sie einfach den Filter auf jedem Widget, für das Sie einen DND-Filter haben möchten, und schon ist er verfügbar.

Der Filter selbst blockiert nicht immer Ereignisse usw. (das wird er tun, wenn Sie das beabsichtigen).Es war nur ein Beispiel dafür, wie man es verwenden kann.

Nur eine von unzähligen Möglichkeiten per Drag & Drop:In dropEvent, DragMoveEvent, DragEnterEvent merkt sich Ihr Filter möglicherweise einen Zeiger auf das, was Sie ablegen möchten, und in DropEvent sendet er ein Signal mit dem Objekt. Dieses Ereignis enthält einen Zeiger auf das Widget und fängt es mit dem Widget dort ab, wo Sie es ablegen, und das ist alles, jedes Widget, das es hat Der installierte Filter verfügt über Drag & Drop.

Der Sinn des Ereignisfilters besteht NICHT darin, JEDES einzelne Widget in Unterklassen zu unterteilen und zu verbinden, wenn Sie den gemeinsamen Ereignistyp haben, den Sie auf ähnliche Weise abfangen und verarbeiten möchten, z. B. Drag-and-Drop-Ereignisse.

Ich ging davon aus, dass Sie wissen, wie man Drag & Drop durchführt, dachte aber, dass es nicht so richtig sein könnte, Ereignisse in allen Widgets immer und immer wieder mit demselben Code zu überschreiben.Deshalb habe ich Ihnen gezeigt, wie es ganz einfach mit einem Eventfilter für alle Widgets, die Sie per Drag & Drop haben möchten, möglich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top