aber dropEvent wird von der QGraphicsView Implementierung verschluckt, die leider nicht virtual ist. Möchte man z.B. aus einer Liste einen Eintrag in eine QGraphicsScene ziehen um dort ein neues Item hinzuzufügen, hat man ein Problem.
Die Lösung des Problems:
Man implementiere die folgenden Funktionen in seiner Klasse die von QGraphicsView abgeleitet ist:
Code: Alles auswählen
void MyView::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("MyView/data"))
{
event->acceptProposedAction();
setInteractive(false);
}
event->accept();
}
void MyView::dropEvent ( QDropEvent * event )
{
switch(event->dropAction())
{
....
};
setInteractive(true);
event->accept();
}
void MyView::dragLeaveEvent ( QDragLeaveEvent * event )
{
setInteractive(true);
event->accept();
}
Der Trick ist also das Interactive Flag der View Klasse so lange auf false zu stellen wie man mit seinen eigenen externen Mimedaten arbeitet.
Nachdem es so funktioniert hab ich mich nicht weiter mit den Hintergründen beschäftigt, ob das Sinn ergibt oder eher ein Bug in QT ist.
Da ich mir aber dachte, dass evtl. mal jemand vor ähnlichen Problemen steht, poste ich hier mal im Tips & Tricks Bereich meine Lösung.
Wenn jemand Probleme sieht das ganze wie oben beschrieben zu lösen, bitte ich um Feedback.