QTreeWidgetItem drag&drop

Alles rund um die Programmierung mit Qt
Antworten
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

QTreeWidgetItem drag&drop

Beitrag von anti-freak »

Ich habe eine abgeleitete Klasse MapTreeWidget die von QTreeWidget erbt, und eine Klasse MapTreeItem, die von QTreeWidgetItem erbt.
Nun habe ich für das TreeWidget drag und drop erlaubt, was nicht nur schön zu haben ist, sondern durchaus auch seinen Sinn hat, seine Maps selbst anzuordnen und eigene Filter zu setzen.
Ich speichere in meiner Map eine ID für die Parent Map (die auch später in das File übertragen wird). Wenn ich nun drag&drop hatte ich mir eigentlich vorgestellt, das es dafür ein signal gibt wodurch ich dann einfach die parent ID ändern könnte, aber das suche ich vergebens.
Ich habe ein wenig im Internet gesucht, aber das einzige, was in die Richtung geht, ist

Code: Alles auswählen

bool QTreeWidget::dropMimeData ( QTreeWidgetItem * parent, int index, const QMimeData * data, Qt::DropAction action ) [virtual protected]
allerdings ist das eher ungenügend, da es eben das parent widget anspricht (also dahin, wo ich dropen möchte, und nicht das, was gedropt wird), was mir einfach nichts bringt (ein TreeItem kann natürlich mehrere children haben).
Jetzt ist die Frage, wie stell ich das am besten an?
Hat da schon jemand Erfahrung mit?

mfg
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

Re: QTreeWidgetItem drag&drop

Beitrag von anti-freak »

Sry für den Doppelpost, aber ich habe selbst eine Lösung gefunden.
Im Endeffekt ein unschöner Hack:

Code: Alles auswählen

void MapTreeWidget::dropEvent(QDropEvent *pEvent)
{
    // update parent ID
    MapTreeItem *pItem = (MapTreeItem*)currentItem();
    QTreeWidget::dropEvent(pEvent);
    if (pItem)
    {
        if (!pItem->parent())
            pItem->getMap()->setParentID(0);
        else
            pItem->getMap()->setParentID(((MapTreeItem*)pItem->parent())->getMap()->getID());
    }
}
Bevor QTreeWidget::dropEvent(pEvent) irgendwas manipulieren kann, speichere ich mir den pointer auf das momentane Item, um dann im Nachhinein meine eigenen Änderungen machen zu können.

mfg
Antworten