通过拖动操作离开时未调用 Qt DragLeaveEvent
Qt DragLeaveEvent not being called when leaving with a drag operation
我有一排按钮,每个按钮都可以接受掉落。但是,当我用光标离开一个按钮并拖动另一个按钮时,不会调用 'dragLeaveEvent'。
class Button(QtGui.QPushButton):
def __init__(self):
super(Button, self).__init__()
self.setAcceptDrops(True)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
drag = QtGui.QDrag(self)
mime = QtCore.QMimeData()
mime.setText("f")
drag.setMimeData(mime)
drag.exec_()
def dragEnterEvent(self, event):
print "enter"
def dragLeaveEvent(self, event):
print "leave"
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.mainLayout = QtGui.QVBoxLayout()
self.setLayout(self.mainLayout)
for i in range(10):
btn = Button()
self.mainLayout.addWidget(btn)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
关于 dragEnterEvent()
报告的文档(来自 Qt5,但同样适用于 Qt4):
If the event is ignored, the widget won't receive any drag move events.
注意:任何拖动移动事件。
这也意味着 drop 事件。
默认情况下,大多数小部件都会忽略所有拖动事件如果不接受拖动输入事件,所以如果您想接收 第一个事件 必须 被接受的所有事件(包括 离开 事件)。
class Button(QtGui.QPushButton):
# ...
def dragEnterEvent(self, event):
<b>event.accept()</b>
print "enter"
我有一排按钮,每个按钮都可以接受掉落。但是,当我用光标离开一个按钮并拖动另一个按钮时,不会调用 'dragLeaveEvent'。
class Button(QtGui.QPushButton):
def __init__(self):
super(Button, self).__init__()
self.setAcceptDrops(True)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
drag = QtGui.QDrag(self)
mime = QtCore.QMimeData()
mime.setText("f")
drag.setMimeData(mime)
drag.exec_()
def dragEnterEvent(self, event):
print "enter"
def dragLeaveEvent(self, event):
print "leave"
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.mainLayout = QtGui.QVBoxLayout()
self.setLayout(self.mainLayout)
for i in range(10):
btn = Button()
self.mainLayout.addWidget(btn)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
关于 dragEnterEvent()
报告的文档(来自 Qt5,但同样适用于 Qt4):
If the event is ignored, the widget won't receive any drag move events.
注意:任何拖动移动事件。
这也意味着 drop 事件。
默认情况下,大多数小部件都会忽略所有拖动事件如果不接受拖动输入事件,所以如果您想接收 第一个事件 必须 被接受的所有事件(包括 离开 事件)。
class Button(QtGui.QPushButton):
# ...
def dragEnterEvent(self, event):
<b>event.accept()</b>
print "enter"