Python 如何在拖动和拖动期间在QTreeView项目之间绘制线;滴
我正在用两个Python 如何在拖动和拖动期间在QTreeView项目之间绘制线;滴,python,drag-and-drop,pyside2,Python,Drag And Drop,Pyside2,我正在用两个QTreeview小部件(一个文件浏览器和一个自定义小部件)构建一个GUI。我已经启用了从文件资源管理器到自定义树以及自定义树内的拖放功能 我想在拖放过程中突出显示鼠标悬停的项目,并在项目之间画一条线,以显示拖动项目的未来位置 这是内部移动(在同一QTreeview中拖放项目)的默认功能,但外部移动(或者可能有方法启用它?)的默认功能,我希望获得相同的“视觉”结果。我可以突出显示悬停的项目(子类化dragmovevent()并选择项目),但我想知道是否有办法在项目之间划一条线 代码
QTreeview
小部件(一个文件浏览器和一个自定义小部件)构建一个GUI。我已经启用了从文件资源管理器到自定义树以及自定义树内的拖放功能
我想在拖放过程中突出显示鼠标悬停的项目,并在项目之间画一条线,以显示拖动项目的未来位置
这是内部移动(在同一QTreeview
中拖放项目)的默认功能,但外部移动(或者可能有方法启用它?)的默认功能,我希望获得相同的“视觉”结果。我可以突出显示悬停的项目(子类化dragmovevent()
并选择项目),但我想知道是否有办法在项目之间划一条线
代码
class MyTreeView(QTreeView):
def __init__(self):
super().__init__()
self.setAcceptDrops(True)
self.setDragEnabled(True)
self.setDropIndicatorShown(True)
self.viewport().setAcceptDrops(True)
self.hover_item = None
self.setMouseTracking(True)
self.showDropIndicator()
def dragMoveEvent(self, event: QDragMoveEvent):
super().dragMoveEvent(event)
index = self.indexAt(event.pos())
item = self.model.itemFromIndex(index)
if event.source() == self:
if item is not None:
[...]
else:
if self.hover_item is not item:
self.hover_item = item
if self.hover_item is not None:
self.selectionModel().clear()
self.selectionModel().select(item.index(), QItemSelectionModel.Rows | QItemSelectionModel.Select)
if item is not None:
event.acceptProposedAction()