我正在尝试在我的应用程序中实现拖放,但是从未调用目标小部件中的dropEvent
。
我对此问题进行了很多搜索,但是我发现的每个解决方案都涉及覆盖dragMoveEvent
,尽管我做到了,但没有区别。
由于上述原因,我的示例代码也无法正常工作
主窗口类:
class Win(QtWidgets.QWidget):
def __init__(self):
super(Win,self).__init__()
self.setGeometry(200,300,400,200)
self.setLayout(QtWidgets.QHBoxLayout())
self.layout().addWidget(DragLabel())
self.layout().addWidget(DropTest())
要拖动的标签:
class DragLabel(QtWidgets.QLabel):
def __init__(self):
super(DragLabel,self).__init__()
self.setText("Drag me")
def mouseMoveEvent(self,e):
if e.buttons() != QtCore.Qt.LeftButton:
return
mimeData = QtCore.QMimeData()
mimeData.setText("Test drop")
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
dropaction = drag.exec(QtCore.Qt.Copyaction)
要放置到的窗口小部件:
class DropTest(QtWidgets.QWidget):
def __init__(self):
super(DropTest,self).__init__()
self.setacceptDrops(True)
def dragEnterEvent(self,e):
print("DragEnter")
e.accept()
def dragMoveEvent(self,e):
print("DragMove")
e.accept()
def dropEvent(self,e):
print("DropEvent")
position = e.pos()
print(position)
e.accept()
当我将标签拖到另一个窗口小部件上时,我看到同时调用了dragEnterEvent
和dragMoveEvent
,但是当我实际上放下标签时,dropEvent
函数没有任何消息
此外,关闭窗口后,应用程序将挂起,并且不会退出。
我正在Fedora 31中使用安装了DNF的PyQt 5.13.1x86_64。Python版本是3.7.5,没有virtualenv。