我正在尝试执行从 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/