Seite 1 von 1

Drag & Drop mit ItemModel

Verfasst: 18. Juni 2008 11:21
von ArneStocker
Hi

gibt es irgendwelche Umstände, die man beim Drag&Drop zwischen verschiedenen Applikationen beachten muss. Ich verwende den Drag&Drop Mechanismus des QAbstractItemModel und innerhalb meiner Applikation sowie zwischen zwei (gleichen) Applikationen funktioniert es wunderbar (testweise mit Mimetyp 'text/plain').

Ich kann auch den Text wunderbar von meiner Applikation in einen Texteditor ziehen, nur umgekehrt nicht.

MyApp1 -> MyApp1 [ok]
MyApp1 -> MyApp2 [ok]
MyApp1 -> TextEditor [ok]
TextEditor -> MyApp1 [not ok]

Es wird nicht einmal ein DragEnterEvent ausgelöst und über dem Fenster (View) befindet sich lediglich ein Kreis mit Balken.

Code: Alles auswählen


        ... m_mime_types.add("text/plain");
        ... m_mime_types.add("text/xml");
        ... this.m_view.setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);
        ... this.m_view.setDragEnabled(true);
	... this.m_view.setAcceptDrops(true);
	... this.m_view.viewport().setAcceptDrops(true);
	
	public boolean dropMimeData(QMimeData mimedata, DropAction dropaction, int arg2, int arg3, QModelIndex parent) {
		if (dropaction == Qt.DropAction.IgnoreAction) {
			return false;
		}
		Iterator<String> format_it = mimedata.formats().iterator();
		while (format_it.hasNext()) {
			String format = format_it.next();
			if (this.m_mime_types.contains(format)) {
				System.out.println("Drop: " + format);
				return true;
			}
		}
        return false;
	}

	
	public QMimeData mimeData(List<QModelIndex> modelindex_list) {
		if ((modelindex_list != null) && (modelindex_list.size() > 0) && (this.m_mime_drag) ) {
			QMimeData mimedata = new QMimeData();
			QModelInfo modelinfo = this.IndexToInfo(modelindex_list.get(0));
			String xml_data = modelinfo.GetDatenText(object_get.mime_text);
			QByteArray bytearray = new QByteArray(xml_data);
			mimedata.setData("text/plain", bytearray);
			mimedata.setData("text/xml",bytearray);
			return mimedata;
		}
		else {
			return super.mimeData(modelindex_list);
		}
	}

	public List<String> mimeTypes() {
		return this.m_mime_types;
	}
gruss Arne

Verfasst: 18. Juni 2008 12:12
von Sephral
In den Qt-Examples ist eine nette Testanwendung.

Code: Alles auswählen

\examples\draganddrop\dropsite
Damit könntest du mal schauen was Dein TextEditor so alles überträgt.

Verfasst: 19. Juni 2008 22:13
von ArneStocker
Leider enthält das qtjambi framework nicht dieses Beispiel. Ich muss mir hier erst mal wieder eine c++ ide aufsetzen.

Was mich aber stutzig macht, dass ich von 'Fremdapplikationen' nicht einmal ein DragEvent erhalten, wohl aber wenn die 'Fremdapplikation' eine weitere Instanz meines Programms ist. Das DragEvent (für den View) sollte aber in jedem Falle aufgerufen werden unabhängig davon, welcher mimetyp übermittelt wird (oder sehe ich da etwas falsch)

Gruß Arne

Verfasst: 20. Juni 2008 09:41
von Sephral
Hallo,

also in meinen Anwendungen nutze ich häufig Drag&Drop mit Fremdapplikationen auf der Basis von text/plain.
Alle Events kommen so wie sie kommen sollten.
Eventuell haben wir es hier mit einem speziellen Problem von QtJambi zu tun?

Das Example macht nichts anderes als alle empfangenen MimeTypes und deren "Inhalt" aufzulisten.

Ciao,
Sephral