Ziehen Sie ein QWidget in QT-5
Ich habe, etwas zu machen, wie die iOS-Schnittstelle, 3x3-Feld der Symbole, die gezogen werden können, um Ihre position zu ändern, und dann denken Sie daran, es in eine XML-Datei.
Entschied ich mich für Grid-Klasse (QWidget ist Eltern) als container und meiner eigenen Klasse, erbt von QWidget, als Elemente.
Jetzt versuche ich, zu lernen, wie führen Sie eine drag & drop für QWidget, aber es scheint, dass Sie nur in der Lage, drop auf ein QWidget, aber es ist unmöglich zu ziehen.
Ist es unmöglich? Wie bewege ich dieses Ding??
Tun Sie wollen einfach nur, um es zu verschieben, oder ziehen Sie es? Nur bewegen ist leichter (stackoverflow.com/questions/12219727/...), drag/drop kompliziert (stackoverflow.com/questions/24582383/...).
InformationsquelleAutor Leonid Bor | 2013-08-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ziehen Sie ein widget ist nicht so einfach. Viele der Codierung, die Sie selbst tun müssen.
Aus der Qt-Doku:
Dies bedeutet, wenn Ihr widget erhält eine Nachricht, dass Sie gezogen werden, wie z.B. mit mousepress, es schaffen QDrag Objekt.
In der QDrag-Objekt können Sie eine pixmap, die stellt Ihr gezogen-widget. Wenn Sie verstecken Sie Ihre widgets an diesem Punkt, es sieht so aus, als wenn der Mauszeiger 'nahm' das widget.
Zusätzlich benötigen Sie einen QMimeData Objekt. In diesem können Sie alle Arten von Daten, die beschreibt Ihr widget. In Ihren Fall etwas, das Ihnen erlaubt, zu identifizieren, Ihre widget. Weil, und hier kommt der schwierige Teil: Sie müssen den Umzug selbst.
Dem widget, welches das raster Elternteil, erhält das drop-Ereignis und liest aus dem mime-Daten, die widget-Wünsche an mich zog. Aus der QDropEvent es kommt der Punkt, wo das widget verschoben werden soll. Das ist, was Sie codieren: Die eigentliche Neupositionierung in Ihrem grid-layout. Und vergessen Sie nicht, aktualisieren Sie die xml.
Bor, die QDrag-Objekt gibt Ihnen die Möglichkeit, über ein icon unter dem Mauszeiger. Und es gibt einen Weg, um die übergabe von Daten über das gezogene Objekt in der drop-receiver. Wenn Sie erhalten diese Informationen, ansonsten... kein problem. addWidget() und removeWidget() sind sicherlich ein Weg, um tatsächlich die bewegen.
InformationsquelleAutor Greenflow
tun ein trick, dann können Sie in der Lage zu ziehen QWidget auch,
Nun diese
widgetPixmap
als pixmap füryourDragObject->setPixmap();
Beispiel,
InformationsquelleAutor Akhil V Suku
Dem Qt-wiki enthält ein QtQuick Beispiel, wie man emuliert das iOS-icon-Schnittstelle mit weniger als 80 Zeilen code.
Finden Sie es hier.
Ich denke, wenn Sie Lesen, die qml, Sie übersetzen es in ein QGridLayout/QWidget layout. Nachdem alle, qml ist nur eine andere Sprache beschreibt das layout.
InformationsquelleAutor huysentruitw