Hi folks!
We want to implement drag-drop functionality for our QTreeView which uses a custom QAbstractItem based model.
I've created a QDragableTreeView class which is derived from QTreeView.
The problem is that the implementation works up to the point when the mouse button is released (and the change in order should happen). Infact nothing happens. My question is how can i switch the order of my elements in the tree at the end of the drag?
Header of QDragableTreeView
#ifndef QDRAGABLETREEVIEW_H
#define QDRAGABLETREEVIEW_H
#include <QTreeView>
{
Q_OBJECT
void performDrag(void);
public:
explicit QDragableTreeView
(QWidget *parent
= 0);
signals:
public slots:
};
#endif // QDRAGABLETREEVIEW_H
#ifndef QDRAGABLETREEVIEW_H
#define QDRAGABLETREEVIEW_H
#include <QTreeView>
class QDragableTreeView : public QTreeView
{
Q_OBJECT
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void performDrag(void);
void dragEnterEvent ( QDragEnterEvent * event );
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
public:
explicit QDragableTreeView(QWidget *parent = 0);
signals:
public slots:
};
#endif // QDRAGABLETREEVIEW_H
To copy to clipboard, switch view to plain text mode
PerformDrag implementation:
void QDragableTreeView::performDrag()
{
PositionsTreeModel *model = static_cast<PositionsTreeModel*>(this->model());
if(model){
qDebug() << "performDrag";
//QStandardItem *sourceItem = model->itemFromIndex(idx);
mimeData->setText("asdf");
drag->setMimeData(mimeData);
if(drag->exec(Qt::MoveAction) == Qt::MoveAction){
//emit layoutAboutToBeChanged();
//model->removeRow(idx.row());
//model->deleteRow(idx);
//emit rowsAboutToBeRemoved(idx.parent(),0,3);
model->removeRow(0, idx);
emit dataChanged(rootIndex(), idx);
qDebug() << "deletingItem...";
qDebug() << "row: " << idx.row();
//emit layoutChanged();
}
}
}
void QDragableTreeView::performDrag()
{
QModelIndex idx = currentIndex();
PositionsTreeModel *model = static_cast<PositionsTreeModel*>(this->model());
if(model){
qDebug() << "performDrag";
//QStandardItem *sourceItem = model->itemFromIndex(idx);
QMimeData *mimeData = new QMimeData();
mimeData->setText("asdf");
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
if(drag->exec(Qt::MoveAction) == Qt::MoveAction){
//emit layoutAboutToBeChanged();
//model->removeRow(idx.row());
//model->deleteRow(idx);
//emit rowsAboutToBeRemoved(idx.parent(),0,3);
model->removeRow(0, idx);
emit dataChanged(rootIndex(), idx);
qDebug() << "deletingItem...";
qDebug() << "row: " << idx.row();
//emit layoutChanged();
}
}
}
To copy to clipboard, switch view to plain text mode
kind regards, reinhart
Bookmarks