如何向 QListWidget 添加逻辑 drag/drop

How to add logic to QListWidget drag/drop

我是 Python/PyQt (v4) 新手,正在继承 QListWidget 并利用其内部拖放机制:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class AlgorithmListControl(QListWidget):
    def __init__(self, parent = None):
        super(AlgorithmListControl, self).__init__(parent)

        self.setAcceptDrops(True)
        self.setDragEnabled(True)
        self.setDragDropMode(QAbstractItemView.InternalMove)

我对默认行为和外观感到满意,并且我能够 drag/drop 小部件内部的项目。现在,我想添加一些在拖动操作开始时和放置操作结束后发生的自定义逻辑。我遇到的问题是如果我处理事件,例如 dragEnterEvent 如下:

def dragEnterEvent(self, event):
    ...

然后我就无法再获得良好的默认 drag/drop 行为(我无法将项目拖动到新位置,我没有获得水平插入指示器等)。如何保留标准的拖放行为,但在这两个事件点添加自定义逻辑?提前谢谢你。

由于重写了同名方法,所以需要实现所有发生在标准方式下的动作,或者调用里面的parent(标准)方法。

您可以通过继承从父 class 调用方法,感谢函数 super(),然后实现您自己的逻辑:

def dragEnterEvent(self, event):
    super().dragEnterEvent(event)
    print('enter')