QTreeView节点拖放

本文详细介绍了如何在Qt中实现自定义拖放操作,包括启用视图支持、设置数据项拖放标志、编码QMimeData和处理Drop事件。通过实例展示了如何在TreeView中重新实现关键函数,如dropMimeData和mimeData,以支持数据的移动和存储。

拖放操作分为拖动(Drag)和放置(Drop)两种操作,当拖动时需要把拖动的数据进行存储(称为编码),数据存储为QMimeData类型的对象(称为放置数据),当执行放置操作时需要把存储的数据读取出来(称为解码),然后进行处理。

自定义拖放操作的步骤:

(1)启用视图拖放支持

ui->treeView->setDragEnabled(true); //允许拖放,默认未启用
ui->treeView->setAcceptDrops(true); //接受放置数据
ui->treeView->setDragDropMode(QAbstractItemView::InternalMove); //拖放模式为移动
ui->treeView->setDropIndicatorShown(true);  //显示拖放位置
ui->treeView->setDragDropOverwriteMode(true); //放下时覆盖已有项

(2)启用数据项的拖放支持

重新实现QAbstractItemModel::flags()函数以提供合适的标志来指示哪些项目可以被拖动,哪些项目将接受放置(Drop)。

(3)编码数据

重新实现QAbstractItemModel::mimeData()函数,把编码后的数据保存在该函数返回的QMimeData对象中。

(4)处理放置数据

重新实现QAbstractItemModel::dropMimeData()函数来处理放置数据,此时需要对放置数据进行解码(即读取出QMimeData对象存储的数据的内容),并将其插入模型的底层数据结构中(或进行其他处理),若该函数修改了数据项或模型的尺寸,则必须注意确保发出所有相关的信号。因为该函数需要插入或删除等操作,所以简单的调用QAbstractItemModel子类中的已经实现了的s

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值