【发布时间】:2014-01-03 21:10:35
【问题描述】:
假设我们有以下层次结构:
+ A
|-- B
|-- D
|-- C
假设用户将 C 拖到 B 上。是否可以将两个节点(包括子节点)作为拖放操作的结果交换?
+ A
|-- C
|-- B
|-- D
我尝试了多种方法:从子类化项目模型(dropMimeData、insertRows 等)到使用 setDragDropOverwriteMode 和 DragDropMode::InternalMove 调整模式,再到子类化 dropEvent(QDropEvent * e),但到目前为止没有任何效果。
我遇到了以下技术限制:
QStandardItemModel::dropMimeData和QTreeview::dropEvent不会让你知道源索引,它们会转发 mime 数据,并且无法获取源的 QModelIndex 来执行交换。DragDropMode::InternalMove和setDragDropOverwriteMode方法无法按预期工作,源节点以某种方式附加到放置目标节点,并且源节点被删除。如果设置DragDropMode::Copy,则保留源节点,但也不会覆盖目标节点。
我们将不胜感激。
【问题讨论】:
标签: c++ qt drag-and-drop qt4 qtreeview