QT: Übertragung von Daten mit QDrag



  • Hi,

    ich möchte QDrag gerne mit mehr Informationen versehen. Ich bin eher der n00b, man erhält ja in dropEvent nur das event und die Beispielprogramme holen sich da immer die mimeData, prüfen, ob die vom richtigen Typ ist, holen sich dann über einen QDataStream noch Sachen wie Pixmap oder Location raus und nutzen das dann.

    Ich bin nicht ganz sicher, wie QDataStream funktioniert. Aber ich möchte jetzt gerne ein paar eigene Daten mitliefern. Eigentlich interessiert mich nicht, was das Drag-Objekt beinhaltet, sondern ich habe ja ein bestimmtes Item, was verschoben wurde.

    Wie mache ich das jetzt am geschicktesten? Wenn ich von QDrag eine eigene Klasse ableite, die ein paar Infos hat, kriege ich die dann auch über den Datastream rausgeparst? Oder wie kann ich sonst irgendwas Individuelles mitschicken?

    Und wieso muss man überhaupt so einen Stream zum Datenauslesen verwenden und kann sich die Event-Daten nicht ganz normal über Getter besorgen? 🙄

    Links oder Hinweise auf spezielle Tutorials oder Artikel zu dem Gebiet nehme ich auch gerne entgegen, wenn sie meine Fragen alle beantworten. 🙂

    Vielen Dank!



  • Okay, hab's rausgefunden. Man kann bei einem QListWidgetItem Daten setzen über setData. Qt::UserRole ist dann sozusagen der Platz, an dem das gesetzt wird, und man kann es nachher darüber auch wieder rausholen. Casts sind nötig, das Ding will eine QVariant. Aber QVariant kann 37 QT-Typen annehmen. Zur Übertragung eines zusätzlichen Strings kann man also einen QString anhängen.

    Und wenn man weitere Variablen möchte, nimmt Qt::UserRole+1, +2 usw. 🙂

    Und dem QDrag kann man Daten dann übergeben, indem man sie vorher über ein QDataStream in ein QByteArray gesteckt hat. Das ByteArray kann man einer MimeData übergeben und diese kann man dem drag dann setzen. Höllisch umständlich, aber es funktioniert.


Anmelden zum Antworten