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);
}