В простых случаях, если не было сделано никакой специальной реализации, этого должно быть достаточно:
class TreeWidget(QtWidgets.QTreeWidget):
def __init__(self, parent=None):
super(TreeWidget, self).__init__(parent)
# ...
self.setDragDropOverwriteMode(True)
self.setDragDropMode(self.InternalMove)
В противном случае вы можете просто проигнорировать событие, если индикатор отбрасывания отсутствует на элементе, после обработка события dragMove с использованием реализации базового класса. Поскольку индикатор сброса должен отображаться для обеспечения успешной операции перетаскивания, и вы, вероятно, не хотите, чтобы он отображался, если операцию следует игнорировать, вы можете включить его перед вызовом базовой реализации, а затем отключить его соответствующим образом:
def dragMoveEvent(self, event):
self.setDropIndicatorShown(True)
super(TreeWidget, self).dragMoveEvent(event)
if self.dropIndicatorPosition() != self.OnItem:
self.setDropIndicatorShown(False)
event.ignore()