我正在尝试将列表项拖到另一个列表中。 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”图标。
答案 0 :(得分:2)
您必须同时实施dragEnterEvent
和dragMoveEvent
。有关其他类似问题,请参阅here
这似乎做你需要的东西,而不是简短而优雅:)
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)