Seite 1 von 1

[gelöst]QTableWidget: drag geht, drop nicht

Verfasst: 28. Januar 2009 13:15
von michams
Hi,

Ich möchte in einem einfachen QTableWidget eine Drop Funktion implementieren, sodaß man eine Datei reinziehen kann. Dazu hab ich das eine Subklasse von QTableWidget erstellt und das dragEnterEvent und dropEvent implementiert. Wenn ich nun was in das Widget ziehe, wird das dragEnterEvent aufgerufen. Allerdings erfolgt kein Aufruf des dropEvent, wenn ich dort was fallen lasse. Es erscheint auch immer der durchgestrichene Kreis als Cursor, also kann ich nicht droppen. Hab deswegen schon
setAcceptDrops(true);
und
setDragDropMode(QAbstractItemView::DragDrop);
aufgerufen, bringt aber nix. Mehr ist in den Examples aber auch nicht gemacht! Was stimmt da nicht?

Verfasst: 28. Januar 2009 13:51
von macman
Im dragEnterEvent legst Du normalerweise fest, welche Typen angenommen werden. Sobald Du den Event also überschreibst, wird erstmal alles abgewiesen. Du könntest den dragEnterEvent einfach weg lassen oder Du packst etwa so was rein:

Code: Alles auswählen

// ohne Gewähr da keinerlei Sicherungen drin sind
void myWidget::dragEnterEvent(QDragEnterEvent *e)
{
	const QMimeData* mime = e->mimeData();
	QStringList sl = mime->formats();
	QString t = sl[0];
	if (t!="text/uri-list")
		e->ignore();
	else
		e->accept();
}
Damit würden z.B. Dateien angenommen werden.

Verfasst: 28. Januar 2009 17:03
von michams
nee, das geht auch nicht. Ich hatte auch schon ein acceptProposedAction in dragEnterEvent drin. Auch das weglassen der Funktion bringt nichts. Das ganze über den Event Filter zu implementieren führt zum selben Ergebnis, drag geht, drop nicht.
Was mich irritiert ist, daß der Mauszeiger sich nicht so verändert, wie er es tut, wenn ein Widget drunter liegt, das drops akzeptiert. Das Droppen scheint immer noch deaktiviert zu sein. Nun hab ich keine Ahnung, was ich da noch einstellen soll und auch im Manual find ich keine Hinweise mehr, was da schief läuft.

Verfasst: 28. Januar 2009 17:34
von michams
ICH HABS! :shock: im Manual etwas weiter unten steht, daß für Widgets auch dragMoveEvent reimplementiert werden muß ... und schon geht's

Verfasst: 12. März 2009 03:17
von CLRS530
Schönen Dank, das hat mir sehr weitergeholfen. Ich stand vor dem selben Ergebnis.