Qt4: Drag & Drop zwischen zwei QListWidgets

Alles rund um die Programmierung mit Qt
Antworten
Cerno
Beiträge: 1
Registriert: 20. Februar 2009 23:33

Qt4: Drag & Drop zwischen zwei QListWidgets

Beitrag von Cerno »

Hallo.

Eine Anfängerfrage, mit der ich mich nun schon drei Tage herumquäle, aber bisher ohne Erfolg.

Ich habe ein kleines Programm geschrieben, in dem man Icons zwischen zwei QListWidgets hin und herkopieren kann. Das alles geht mit der Standardfunktionalität der QListWidgets ganz problemlos.

Jetzt möchte ich allerdings in das Drop-Event eingreifen. Statt das Icon zu kopieren soll irgendetwas anderes passieren. Sagen wir der Einfachheit halber, ich möchte die Texte aller gedroppter Icons ausgeben (multiselection ist aktiviert).

Mein Ansatz war, eine Klasse MyListWidget von QListWidget abzuleiten und die Funktion dropEvent zu überladen. So habe ich es gemacht:

Code: Alles auswählen

void MyListWidget::dropEvent( QDropEvent *evt )
{
	QList<QListWidgetItem *> list = items( evt->mimeData() );

	if (!list.isEmpty())
	{
		QList<QListWidgetItem *>::iterator iter;
		for (iter = list.begin(); iter != list.end(); ++iter);
		{
			QListWidgetItem *item = new QListWidgetItem(this);
			QString text = evt->mimeData()->text();
			//something like cout << text << endl;
		}
	}
	QListWidget::dropEvent(evt);
	evt->acceptProposedAction();
}


Wenn ich das so versuche, habe ich zwar immer noch die Grundfunktionalität des QListWidgets (kopieren der Icons), was auch okay ist, aber ich kann nicht auf die gedroppten Daten zugreifen. Die QList ist immer leer. Ich habe einen Breakpoint gesetzt, also wird meine überladene Funktion auch aufgerufen, aber wie gesagt, die Liste ist leer.

Was mache ich falsch? Ich habe statt der dropEvent-Funktion auch schon alternativ die dropMimeData-Funktion überladen und direkt auf die als Parameter übergebenen MimeData zugegriffen, aber auch hier ist die QList leer. Auch Abfragen mittels hasText(), hasImage() etc liefern false zurück.

Ich hatte bei meiner Suche gelesen, dass ich die anderen drag/drop-Funktionen auch überladen müsse (mouseMoveEvent), aber ich bin davon ausgegangen, dass das Befüllen der MimeData ja ohnehin in der Basisfunktionalität passiert, so dass ich das nicht noch einmal selbst definieren muss. Meine Annahme war, dass ich mich durch Überladen der oben genannten Funktionen einfach zwischen die Prozesskette "Maustaste loslassen -> Icon wird kopiert" hängen kann um eigene Berechnungen durchzuführen.

Denkfehler? Was mache ich falsch?

Danke schonmal für die Hilfe.
Antworten