我有一个窗口,其中包含使用Qt Designer设计的3个表格小部件。
表1.显示存在的组
表2.显示所有员工(Drag Enabled setto True)
表3.显示所选组中的员工(AcceptDrops设置为True)
我想在表3中捕获drop事件,即在执行drop之后我想运行一个函数。同时它应该避免重复。
我设置了eventfilters
Table3.installEventFilter(self)
但无法捕捉跌落事件。
我的eventfilter def如下所示
def eventFilter(self, object, event):
if (object is self.TBLW_GroupMembers):
if (event.type() == QtCore.QEvent.DragEnter):
if event.mimeData().hasUrls():
event.accept() # must accept the dragEnterEvent or else the dropEvent can't occur !!!
print "accept"
else:
event.ignore()
print "ignore"
if (event.type() == QtCore.QEvent.Drop):
print 'drop'
return False # lets the event continue to the edit
return False
我已按照此Thread
发布的此流程进行操作能够抓住DragEnter
而不是Drop
答案 0 :(得分:0)
我相信你还需要处理(和接受)QtCore.QEvent.DragMove
事件。您可能还应该为DragLeave
添加处理程序,但我认为这不太重要。
不幸的是,这个要求似乎没有得到很好的记录,但是当我实施拖放时,我发现了类似的行为。就个人而言,我通常只是覆盖相关小部件的dragEnterEvent()
,dragMoveEvent()
和dropEvent()
方法(而不是安装事件过滤器),但原理是相同的(因此我希望解决方案是一样的。)