我的TreeView有各种带子项的文件夹。每个孩子都有一个图标和文字名称。用户可以选择一个或多个项目并将其拖动到QMDI区域。作为我的darg drop的图像我有一个本地图片drag-> setPixmap(QPixmap(myPixImage))。我需要的是:我如何动态地将带有图标和文本的选定项目作为myPixImage。
答案 0 :(得分:2)
当您自己的代码创建QDrag对象时,很容易设置像素图,但是使用QXxxViews(不仅仅是QTreeView),您只能控制QMimeData(当重写QAbstractItemModel :: mimeData()时)。
因此,如果你真的需要它,我现在唯一的方法是继承QTreeView,覆盖(以及......重新简化)mouseMoveEvent()等。 如果这样做,您可以在创建QDrag时获取所选项目,例如: selectionModel的() - > selectedItems()
答案 1 :(得分:0)
首先:没有简单的方法可以做到这一点。基本上是因为当您(作为开发人员)允许开始拖动(例如QDrag::exec
)时启动here,并且在拖动完成之前它不会返回。
您希望在拖动时更改QDrag
对象。
这里你最好的选择是:
Drag
对象和之后运行QDrag::exec
将对象存储在某个池中,该池可以在代码中的任何位置访问。可能类似于static map<QDrag *> pool
QTimer
对象的循环QDrag
事件,该对象可以从池中获取。 不尝试使用Qthread
,因为您最终会遇到一些“QObject无法从/移动到线程”错误。请注意,您必须相应地在视觉上调整QTimer
重复事件。