QTreeWidget internal move
Verfasst: 28. Mai 2008 16:39
Wie kann man verhindern, dass bei einem Move innerhalb des QtreeWidget ein Root Item in ein Child Item verschoben wird.
Child Items soll man aber schon zwischen den Root Items verschieben können.
Mein Codebeispiel:
mytreewidget.h
mytreewidget.cpp
main.cpp
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();
}