Seite 1 von 1
QTreeWidget (internalMove nur auf gleicher Ebene)
Verfasst: 29. Juni 2009 09:18
von Tom_Tom
Hallo.
Ich habe volgende Frage:
QTreeWidget w;
w.setDragDropMode ( QAbstractItemView::InternalMove ) ;
Wie kann ich es jetzt anstellen, dass ich meine Items nur auf gleicher Ebene verschiebe und nicht, wenn ich ein Item über ein anderes loslasse, dieses dort als Child-Item platziert wird? Es sollen also keine ChildItems möglich sein, sondern nur das verschieben der Einträge auf gleicher Ebene.
Kann mir da jemand helfen?
Verfasst: 29. Juni 2009 09:31
von macman
dropEvent und dragMoveEvent. Dort prüfen ob ein Drop erlaubt ist und entsprechend reagieren.
Verfasst: 29. Juni 2009 17:34
von Tom_Tom
danke für die schnelle Antwort.
Deinen Lösungsansatz an sich hatte ich auch schon drüber nachgedacht.
Allerdings habe ich noch keinerlei Idee, wie ich das ganze dann umsetzen soll.
Verfasst: 30. Juni 2009 07:54
von macman
Ich habe es in einem Projekt mal so gehandhabt, das ich das dropEvent überschrieben habe. Dort habe ich dann das Item ermittelt auf das gedropt wurde und wenn es Kinder hatte, kam eine MessageBox mit dem Hinweis das das nicht geht. Dann wurde die Basisfunktion eben nicht aufgerufen, that's it.
Verfasst: 30. Juni 2009 11:57
von Tom_Tom
Hm... das ist aber eher eine unschöne Lösung.
Am Besten wäre es, wenn man den QTreeWidgetItem(s) irgendwie sagen könnte, dass es garnicht erst Drops akzeptieren soll. Sprich: Der User erst garnicht die Möglichkeit hat, soweit zu kommen. Sondern dass er nur innerhalb der Ebene verschieben kann.
Verfasst: 30. Juni 2009 13:14
von macman
Das ist abhängig von den Umständen. Bei mir konnte man nur bestimmte Items in andere Zweige verschieben und da wäre mal ein Plus, mal ein Verbotsschild, als Indikator verwirrend gewesen.
In deinem Falle musst Du dragMoveEvent überschreiben. Schau dir das draggableicons-Example an und du siehst wie es geht.