[Qt4.1] QTreeWidget und Drag&Drop

Alles rund um die Programmierung mit Qt
Antworten
Rob
Beiträge: 9
Registriert: 20. Februar 2006 15:11

[Qt4.1] QTreeWidget und Drag&Drop

Beitrag von Rob »

Hallo,
ich habe ein Problemm und zwar möchte ich gerne irgendwie an die Daten, die beim Drag-event erzeugt werden, heran. Ich dachte mir dass ich die DropEvent-Mehtode überschreibe und mir die Daten aus der mimeData heraus nehme. Jedoch stehen in der Variablen keine Daten drin. Wenn mir jemand helfen könnte wäre ich sehr dankbar.

Code: Alles auswählen

void tableWidget::dropEvent(QDropEvent *event)
{
	if ( event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist") )
	{
		QByteArray itemData = event->mimeData()->data("application/x-qabstractitemmodeldatalist");
	    QDataStream dataStream(&itemData, QIODevice::ReadOnly);
	        
	    QString test;
	    dataStream >>test;
		QMessageBox::warning( this,"",test,tr( "&OK" ), tr( "&Abbruch" ),0,0,1 );    //Zum anzeigen des Inhalts aus 'test'
	}
}

macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: [Qt4.1] QTreeWidget und Drag&Drop

Beitrag von macman »

Rob hat geschrieben:Jedoch stehen in der Variablen keine Daten drin.
Schreibst Du denn welche rein? Von alleine passiert da nichts. In der Doku ist die Drag'n'Drop Geschichte übrigens recht gut beschrieben.
Rob
Beiträge: 9
Registriert: 20. Februar 2006 15:11

Beitrag von Rob »

Ich denke doch, da er ja daten in das Ziel schreibt wenn ich die Methode nicht überlade.
Die Doku über Drag&Drop hat mir leider bei meinem speziellen Problem nicht geholfen.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Dann weiß ich auch nicht, in allen mir bekannten Fällen mußte man selbst vorher ein QDrag-Objekt anlegen. Wenn es nicht all zu groß ist, kannst Du es ja mal hoch laden.
Rob
Beiträge: 9
Registriert: 20. Februar 2006 15:11

Beitrag von Rob »

Also muss ich auch ein eigenes Drag-Objekt erstellen? Ich dachte mir nämlich ich könnte ja auch einfach die Daten nehmen, da es ja die richtigen sind, nur ich nicht alle brauche.
Dann versuch ich er halt mit dem Drag-Objekt. :cry:
Rob
Beiträge: 9
Registriert: 20. Februar 2006 15:11

Beitrag von Rob »

Ich habe es versucht und festgestellt, dass es ein unheimlicher aufwand ist. Darum bitte ich noch einmal um Hilfe ob mir nicht jemand sagen kann wie ich an die Daten komme.
suamikim
Beiträge: 59
Registriert: 1. November 2009 15:58

Beitrag von suamikim »

Sorry gleichmal, dass ich diesen alten Thread wieder raufhole, aber ich stehe gerade vor der selben Frage wie der Threadersteller.

Prinzipiell reicht mir das Standardverhalten vom DnD des QTreeWidgets schon aus, dh. wenn ich nichts überschreibe und alles richtig einstelle, werden in meinem Tree alle Daten richtig verschoben (was die GUI betrifft).

Zusätzlich müsste ich aber mein Parent-Widget darüber informieren, wenn Daten verschoben werden, damit ich entsprechende Datenbankänderungen vornehmen kann.

Also dachte ich mir, dass ich einfach mein QTreeWidget "subclasse", nur das dropEvent überschreibe, darin die Basis-Funktion aufrufe (QTreeWidget::dropEvent(event)), damit alle Standard-GUI-Funkionen weiter funktionieren und zusätzlich ein Signal rausschicke, auf dass ich dann in meinem Parent-Widget reagiere und die entsprechenden Datenbankänderungen vornehme.

Das ganze funktioniert bisher auch soweit (eigene QTreeWidget-Klasse erstellt, dropEvent überschrieben), dh. die GUI reagiert genau wie ohne die Subklasse, allerdings finde ich keine Möglichkeit im dropEvent an die richtigen Daten zu kommen, die ich dann übers Signal verschicken kann...

Falls niemand eine Idee hat, muss ich wie oben erwähnt das Drag-Objekt wohl wirklich selbst erstellen. Fände es jedoch eleganter, wenn ich nur im dropEvent an die Daten kommen könnte!

danke, mfg
suamikim
Beiträge: 59
Registriert: 1. November 2009 15:58

Beitrag von suamikim »

Mittlerweile ist mir selbst eine recht einfache Lösung eingefallen:

Da ich DnD ja sowieso nur fürs verschieben von Items innerhalb meines TreeWidgets zulasse (InternalMove) komme ich über die selectedItems()-Methode des TreeWidgets an alle Items, die gedropt wurden...

Dieses Problem kann also als gelöst betrachtet werden (zumindest für meine Problemstellung).

Weitere Probleme beschreibe ich in einem neuen Thread:
http://www.qtforum.de/forum/viewtopic.php?t=11043
Antworten