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

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值