#include #include "MyTreeWidget.h" MyTreeWidget::MyTreeWidget(QWidget *parent) : QTreeWidget(parent) { setAcceptDrops(true); (new QTreeWidgetItem(this))->setText(0, "1-one"); (new QTreeWidgetItem(this))->setText(0, "2-two"); (new QTreeWidgetItem(this))->setText(0, "3-three"); (new QTreeWidgetItem(this))->setText(0, "4-four"); (new QTreeWidgetItem(this))->setText(0, "5-five"); (new QTreeWidgetItem(this))->setText(0, "6-six"); (new QTreeWidgetItem(this))->setText(0, "7-seven"); } void MyTreeWidget::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) startPos = e->pos(); //if (DragSelectingState == state()) // this two lines // setState(NoState); // fix the problem QTreeWidget::mousePressEvent(e); } void MyTreeWidget::mouseMoveEvent(QMouseEvent *e) { if (e->buttons() & Qt::LeftButton) { int distance = (e->pos() - startPos).manhattanLength(); if (distance >= QApplication::startDragDistance()) performDrag(); } QTreeWidget::mouseMoveEvent(e); } void MyTreeWidget::dragEnterEvent(QDragEnterEvent *) { } void MyTreeWidget::dragMoveEvent(QDragMoveEvent *) { } void MyTreeWidget::dropEvent(QDropEvent *) { } void MyTreeWidget::performDrag() { QTreeWidgetItem *item = currentItem(); if (item) { QMimeData *mimeData = new QMimeData; mimeData->setText(item->text(0)); QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); if (drag->exec(Qt::MoveAction) == Qt::MoveAction) delete item; } }