QTreeWidget拖拽功能-Drag And Drop

QTreeWidget拖拽 Drag and Drop 临时记录 后续更新

1 拖拽时基本效果显示【鼠标样式hotpot 拖拽移动时所经过项的效果显示(即hover)】

2 拖拽限制【将某项推拽至目标项下禁止与允许效果即是否允许拖到目标项下在move事件里写】

3 拖拽至自身拖拽至其他

Demo:

基本设置:

this->setDragEnabled(true);

this->setAcceptDrops(true);

this->setDropIndicatorShown(true);

this->setDragDropMode(QAbstractItemView::InternalMove);

this->setSelectionMode(QAbstractItemView::ExtendedSelection);

实现:

void MyTree::dragEnterEvent(QDragEnterEvent *e)

{

QTreeWidget::dragEnterEvent(e);

e->accept();

}

void MyTree::dragMoveEvent(QDragMoveEvent *e)

{

QTreeWidget::dragMoveEvent(e);

e->setDropAction(Qt::MoveAction);

/* 这里做限制 */

If(disabled)

{

e->setDropAction(Qt::IgnoreAction);

}

/* 显示效果即时刷新 */

update();

e->accept();

}

void MyTree::dropEvent(QDropEvent *e)

{

e->setDropAction(Qt::MoveAction);

e->accept();

QTreeWidget::dropEvent(e);

}

void MyTree::startDrag(Qt::DropActions supportedActions)

{

Q_UNUSED(supportedActions);

/* 数据存储 */

QMimeData *mimeData = new QMimeData;

mimeData->setData("data", data));

QDrag* drag = new QDrag(this);

drag->setMimeData(mimeData);

/* 拖拽显示效果 */

QPushButton btn;

btn.setStyleSheet("background:rgba(225,225,225,100);border:1px;");

btn.setFixedSize(25, 15);

QPixmap pix = btn.grab();

drag->setPixmap(pix);

drag->setHotSpot(QPoint(pix.width() / 2, pix.height()));

drag->exec(Qt::MoveAction);

}

你可能感兴趣的:(QT,前端,qt)