Win*_*gha 4 treeview qt drag-and-drop
我在拖放时遇到一些问题QTreeView:
我在模型中设置了 flag并Qt::MoveAction重新实现了等。该模型继承了.removeRows()dropMimeData()QAbstractItemModel
当我拖放时,mimeData()、dropMimeData()会自动调用,并且也会自动dropMimeData()调用insertRows()。但removeRows()没有被调用,所以拖动的项目仍然存在。我用谷歌搜索,但他们说他们的removeRows()电话是自动呼叫的。
removeRows()为什么我的之后没有被叫到dropMimeData()?removeRows()手动拨入dropMimeData()吗?QModelIndex拖动开始的时间?当开始拖动时,在 中mimeData(),我可以将索引保存在私有成员中,但看起来不太好。
任何意见,将不胜感激。
简短回答
Qt::MoveAction如果一切配置正确,则目标不应删除源项目,如果执行a,则拖动的发起者应删除源项目。
视图的配置
QAbstractItemViewQTreeView(它是, QListView, , ...的基类)在 中QTableView实现操作的启动和完成:QDragstartDrag
Run Code Online (Sandbox Code Playgroud)if (drag->exec(supportedActions, defaultDropAction) == Qt::MoveAction) d->clearOrRemove();
因此,当请求的放置操作(由 返回QDrag::exec)为 a时Qt::MoveAction,该项目将自动删除(或按照 指定清除setDragDropOverwriteMode)。
视图的重要配置选项有:
setDragDropMode:指定视图是否应接受来自外部项目或仅内部项目的拖放项目。该函数相应地调用setDragEnabledand setAcceptDrops。
setDragEnabled:启用内置拖动机制setAcceptDrops:启用内置掉落机制setDragDropOverwriteMode:指定是否应删除源项目(通常在树视图中)或清除(通常在表视图中)
setDefaultDropAction:启动操作时指定的默认放置操作QDrag。
型号配置
除了视图的配置之外,您还应该正确配置模型。
您应该实现模型的编辑界面removeRows,即、insertRows、moveRows和setData。尽管根据您的具体情况,可能没有必要实现所有这些,但对于可编辑模型来说,无论如何实现它们都是一个好方法。
supportedDropActions:重新实现此函数以返回支持删除操作(Qt::CopyAction默认情况下)。请注意,用户可以通过按某些键在不同支持的操作之间切换。(shift对于Qt::MoveAction和control对于Qt::CopyAction)
supportedDragActions:如果支持的拖动操作与支持的放置操作不同,请重新实现此功能。例子
Qt 本身的源代码就是很好的例子。相应的Q*Widget类(例如QTreeWidgetfor QTreeView)提供了视图和相应模型的具体实现。
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |