Python pyqt dropEvent将不会激发

Python pyqt dropEvent将不会激发,python,qt,events,drag-and-drop,pyqt,Python,Qt,Events,Drag And Drop,Pyqt,我试图将一个列表项拖到另一个列表上。dragEnterEvent可以很好地激发,即e.accept(),但是dropEvent从不激发。代码如下: class LocalList(QtGui.QListWidget): def __init__(self, parent): super(LocalList, self).__init__(parent) self.parent = parent self.setDragEnabled(Tru

我试图将一个列表项拖到另一个列表上。dragEnterEvent可以很好地激发,即e.accept(),但是dropEvent从不激发。代码如下:

class LocalList(QtGui.QListWidget):
    def __init__(self, parent):
        super(LocalList, self).__init__(parent)
        self.parent = parent
        self.setDragEnabled(True)

    def mouseMoveEvent(self, e):
        mimeData = QtCore.QMimeData()
        mimeData.setText(self.currentItem().text())
        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        dropAction = drag.exec_()

class RemoteList(QtGui.QListWidget):
    def __init__(self, parent):
        super(RemoteList, self).__init__(parent)
        self.parent = parent
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        print "MimeText: " + e.mimeData().text()
        e.accept()

    def dropEvent(self, e):
        print "DROPPED"
        print self.parent.localdir + "/" + e.mimeData().text()
        e.accept()

为了澄清,我将从LocalList拖到RemoteList。mousMoveEvent启动得很好,因为mimeData().text()在RemoteList的dragEnterEvent中打印得很好。但我认为它的接受方式不对,因为dropEvent从未被触发,而且当我在RemoteList上悬停时,它没有“drop here”图标。

您必须同时实现
DragentEvent
dragMoveEvent
。请参阅以了解另一个类似的问题

这似乎是你所需要的,相当简短和优雅:)


我认为您必须同时实现
dragEnterEvent
dragmovevent
。请参阅另一个类似的问题,就是它,非常感谢:)我似乎无法接受您的这种形式的答案。我不确定这是否是所需的全部内容,但它解决了问题,您现在可以接受我下面的答案。
class DragDropListWidget(QtGui.QListWidget):
    def __init__(self, type, parent=None):
        super(DragDropListWidget, self).__init__(parent)
        self.setDefaultDropAction(QtCore.Qt.MoveAction)
        self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
        self.setAcceptDrops(True)