ich habe einen QTreeView und möchte hier meine angezeigten Items verschieben. Ich habe im Konstruktor meiner abgeleiteten Klasse des QTreeView eigentlich Drag'n'Drop aktiviert:
Ich kann zwar ein Item anwählen und verschieben, jedoch ist es mir nicht möglich dies an einer anderen Stelle zu platzieren. Muss ich dafür zusätzliche Funktionen selbst implementieren um dies zu ermöglichen oder fehlt mir nur ein Konfigeintrag?
QMimeData * FMITreeModel::mimeData(const QModelIndexList & indexes) const {
QMimeData * ret = new QMimeData;
long a = (long)indexes.at(0).internalPointer();
QString result;
QTextStream(&result) << a;
qDebug() << result;
ret->setData("application/x-qabstractitemmodeldatalist", QByteArray(result.toAscii()));
return ret;
}
bool FMITreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent){
FMITreeItem * parentitem = getItem(parent);
if (parentitem->elementTyp() == 2 || parentitem->elementTyp() == -1) return false;
//item from Pointer in MimeData
QString arg = QString(data->data("application/x-qabstractitemmodeldatalist").data());
FMITreeItem * droppeditem = (FMITreeItem *) arg.toLongLong();
bool nodeok = false;
if (parentitem->elementTyp()==0) nodeok = parentitem->data(0)==droppeditem->parent()->data(0);
else if (parentitem->elementTyp()==1) nodeok = parentitem->parent()->data(0)==droppeditem->parent()->parent()->data(0);
if (nodeok==false) return false;
//gleiches Kind finden
FMITreeItem * uitem = parentitem->childByVal(droppeditem->data(0));
emit layoutAboutToBeChanged();
if (uitem == NULL) {
//neu einfügen
FMITreeItem * copy = new FMITreeItem (*droppeditem);
copy->setParent(parentitem);
parentitem->appendChild(copy);
} else {
//zweig updaten
uitem->updateItemTree(droppeditem, 0);
//saveIndex(parent);
}
emit layoutChanged();
return true;
}
wie du siehst musst du dann natürlich auch noch überlegen was du mit dem verschobenen Zweig machst...wenn Du nur mit nem Pointer als Wert arbeitest, hast Du es einfach.