dropEvent() 没有被调用

Bro*_* S. 2 python pyqt

我正在尝试从 QTreeWidget 到 QGraphicsView 执行拖放操作。dragStart() 有效,并且 dragEnterEvent() 有效,但 dropEvent() 从未被调用。此外,像素图直到光标进入 QGraphicsView 才显示,这不是问题,但我只是认为它会在拖动开始后立即出现。这是我的 startDrag 函数:

def on_list_startDrag(self, supportedActions):
    #Retreive the item that was clicked on
    currentPart = self.ui.list.currentItem()
    part = currentPart.text(0)

    drag = QtGui.QDrag(self.ui.list)
    mime = QtCore.QMimeData()
    print(part)
    #retreive that associated graphics file
    icon = QtGui.QIcon('drawings/FULL/' + part + '.svg')
    pixmap = icon.pixmap(102,122)

    selected = QtGui.QImage('drawings/FULL/' + part + '.svg')
    data = pickle.dumps(selected)

    mime.setData('application/x-item', data)
    #mime.setImageData(QtGui.QImage('drawings/FULL/' + part + '.svg'))
    drag.setMimeData(mime)
    drag.setHotSpot(QtCore.QPoint(pixmap.width()/2, pixmap.height()/2))
    drag.setPixmap(pixmap)
    drag.exec_()
Run Code Online (Sandbox Code Playgroud)

这是dragEnterEvent:

def on_workArea_dragEnterEvent(self, event):
    print(event.format())
    if (event.mimeData().hasFormat('application/x-item')):
        event.accept()
        print('accepted')
    else:
        event.ignore()
Run Code Online (Sandbox Code Playgroud)

最后是 dropEvent 代码:

def on_workArea_dropEvent(self, event):
    print('dropped')
Run Code Online (Sandbox Code Playgroud)

当我开始拖放操作时,光标有一个带斜线的圆圈,就像小部件不接受放置一样,但我将 QGraphicsView、workArea 设置为接受放置。有人可以帮我让drop工作并解释为什么在光标位于QGraphicsView上之前像素图不会显示在光标后面。谢谢你。

小智 6

您也需要实施dragMoveEvent(),否则dropEvent()不会被调用。这也是导致它显示正确放置图标的原因,而不是斜线“不能放置在这里”图标。