pyqt dropEvent不会触发

问题描述 投票:0回答:1

我试图将列表项拖到另一个列表上。 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”图标。

python qt events drag-and-drop pyqt
1个回答
2
投票

你必须实现dragEnterEventdragMoveEvent。有关其他类似问题,请参阅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)
© www.soinside.com 2019 - 2024. All rights reserved.