pyqt dropEvent 不触发
我正在尝试把一个列表项拖到另一个列表上。拖动进入事件(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)。鼠标移动事件(mouseMoveEvent)也能正常触发,因为在远程列表的拖动进入事件中,mimeData().text() 打印的内容也没问题。不过我觉得它没有正确接受这个操作,因为放下事件从来没有触发,而且当我把鼠标悬停在远程列表上时,它没有显示“在这里放下”的图标。
1 个回答
2
你需要实现两个功能:dragEnterEvent
和 dragMoveEvent
。想了解更多类似的问题,可以查看 这里。
这个方法看起来既简单又优雅,能够满足你的需求 :)
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)