python - dropEvent() 没有被调用

标签 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_()

这里是dragEnterEvent:

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

最后是 dropEvent 代码:

def on_workArea_dropEvent(self, event):
    print('dropped')

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

最佳答案

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

关于python - dropEvent() 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159915/

相关文章:

python - 读取 XML 文件并在 Python 中获取其属性值

python - Tensorflow:DropoutWrapper 导致不同的输出?

python - 如何选择 QTextBrowser 中的所有事件

python - QGraphicsAnchorLayout 未锚定在 QGraphicsScene 中

python - 如何使用 Python 和 Beautiful Soup 从框架中抓取信息

python SIP日志文件处理

python - 在 python 中使用三元运算符打印时跳过新行

matplotlib.backends.backend_qt5 与 matplotlib.backends.backend_qt5agg

python - QDial 禁用完整游览

python - PyQt:初始化重置的默认值