Child Items soll man aber schon zwischen den Root Items verschieben können.
Mein Codebeispiel:
mytreewidget.h
Code: Alles auswählen
#ifndef MYTREEWIDGET_H_
#define MYTREEWIDGET_H_
#include <QtGui>
class MyTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
MyTreeWidget(QWidget *parent = 0);
QStringList mimeTypes() const;
bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action);
Qt::DropActions supportedDropActions () const;
};
#endif /*MYTREEWIDGET_H_*/Code: Alles auswählen
#include <iostream>
#include <QtGui>
#include "mytreewidget.h"
using namespace std;
MyTreeWidget::MyTreeWidget(QWidget *parent)
: QTreeWidget(parent)
{
//setRootIsDecorated(false);
setSelectionMode(QAbstractItemView::ExtendedSelection);
setDragEnabled(false);
setAcceptDrops(false);
setDropIndicatorShown(true);
setDragDropMode(QAbstractItemView::InternalMove);
setDragDropOverwriteMode(false);
}
QStringList MyTreeWidget::mimeTypes () const
{
return model()->QAbstractItemModel::mimeTypes();
}
bool MyTreeWidget::dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action)
{
QModelIndex idx;
if (parent) idx = indexFromItem(parent);
cout << index << endl;
if (idx.isValid())
{
cout << "isValid" << endl;
index=0;
}
return model()->QAbstractItemModel::dropMimeData(data, action , index, 0, idx);
}
Qt::DropActions MyTreeWidget::supportedDropActions () const
{
return Qt::CopyAction | Qt::MoveAction;
}
Code: Alles auswählen
#include <QtGui>
#include "mytreewidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyTreeWidget *treeWidget = new MyTreeWidget();
treeWidget->setColumnCount(2);
QStringList sHeader;
sHeader << "Letter" << "Number";
treeWidget->setHeaderLabels(sHeader);
QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget);
rootItem->setText(0, "A");
rootItem->setText(1, "0");
QTreeWidgetItem *aItem = new QTreeWidgetItem(rootItem);
aItem->setText(0, "A");
aItem->setText(1, "0");
aItem = new QTreeWidgetItem(rootItem);
aItem->setText(0, "B");
aItem->setText(1, "1");
aItem = new QTreeWidgetItem(rootItem);
aItem->setText(0, "C");
aItem->setText(1, "2");
rootItem = new QTreeWidgetItem(treeWidget);
rootItem->setText(0, "B");
rootItem->setText(1, "1");
rootItem = new QTreeWidgetItem(treeWidget);
rootItem->setText(0, "C");
rootItem->setText(1, "2");
treeWidget->setWindowTitle(QObject::tr("QTreeWidget InternalMove"));
treeWidget->show();
return a.exec();
}