Qt Drag and Drop QTreeView
Qt Drag and Drop QTreeView
我的TreeView有不同的子文件夹。每个孩子都有一个图标和文本名称。用户可以选择一个或多个项目并将其拖动到QMDI区域。作为我的darg drop图像,我有一个本地图片拖拽->setPixmap(QPixmap(myPixImage)))。我需要的是:我如何使选中的项目与图标和文本作为myPixImage动态。
当您自己的代码创建QDrag对象时,很容易设置像素图,但是使用QXxxViews(不仅仅是QTreeView),您只能控制QMimeData(当重写QAbstractItemModel::mimeData()时)。
因此,如果你真的需要,我现在唯一的方法是子类化QTreeView,重写(嗯…重新实现)mouseMoveEvent()等。如果你这样做,你可以在创建QDrag时通过selectionModel()->selectedItems()获得选中的项目。
首先:没有简单的方法可以做到这一点。基本上是因为QDrag::exec
是在你(作为开发人员)允许开始拖动时启动的(这里的例子),直到拖动完成它才返回。
当拖拽时,想要更改QDrag
对象
你最好的选择是:
-
在创建
Drag
对象之后,在运行QDrag::exec
之前将对象存储在可以在代码中的任何地方访问的池中。可能是static map<QDrag *> pool
- 设置一个循环
QTimer
事件,不断更新QDrag
对象,可以从池中获取。做不是尝试使用Qthread
s,因为你最终会遇到一些"QObject不能从/移动到线程"错误。 - 当拖动结束时(作为用户),从池中清除对象
请注意,您必须在视觉上相应地调整QTimer
重复事件。
相关文章:
- QTreeView幻灯片多选后无法使用单击选择
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 在QTreeView中仅显示共享驱动器和文件夹
- 更新 QTreeView 和 QListView 中的项目
- 如何设置QTreeView的起点目录?
- 如何在QTreeView中禁用默认复制行为?
- 如何防止特定的QTreeView分支被拖动?
- QTreeView:如果未键入任何内容,则不要更新索引
- 如何使用QTreeView在QComboBox中选择项目
- 为什么不能使用 setData() 在 QTreeView 中设置单元格的背景颜色?
- 从 QTreeView 中删除项目时取消选择所有行
- 如何将 ItemDelegate 设置为仅应用于 QTreeView 中的父列
- 如何从QStyle获取QTreeView的识别宽度
- 使用自定义上下文菜单删除 QTreeView 项崩溃
- QTreeView:如何中止选择更改
- Qt - Overriding QTreeView::drawBranches()
- 使用QTREEVIEW中的Qcombobox委托项目
- 使用自定义模型从Qtreeview删除行
- 无法通过 QModelIndex 从 QTreeView 获取项目
- Qt Drag and Drop QTreeView