我需要对qlistwidget中项目的拖放重新排序做出响应。我找不到可用的qevent。任何帮助都将不胜感激!
我正在使用eventfilter例程捕获gui中的事件:
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def eventFilter(self, sourceObj, event):
if event.type()== QtCore.QEvent.Drop:
print("got to drop event")
(processing code here)
也许这个事件不会在项目的拖放重新排序时触发,因为拖放是在小部件内部进行的(例如,小部件外部的任何内容都不会被拖放到它上)?
我试过
QtCore.QEvent.Drop
和QtCore.QEvent.MouseButtonRelease
但没有成功。我应该用哪种活动?(我在ubuntu 16.10上使用python3,pyqt4。我的eventfilter例程可用于gui中的其他操作,如单击、lostfocus等)。
最佳答案
这是我找到的解决办法。解决方案是使用eventfilter来监听childremoved qevent。显然,当qlistwidget中的项通过拖放重新排序时,qt会触发此事件。
第一步。在包含qlistwidget的类的init(self)中,为要捕获其事件的小部件安装事件筛选器。
def __init__(self):
self.lstYourWidgetNameHere.installEventFilter(self)
第二步。在同一类的eventfilter例程中,检查childremoved qevent。
def eventFilter(self, sourceObj, event):
objName = str(sourceObj.objectName())
if event.type()== QtCore.QEvent.ChildRemoved:
if objName == "lstYourWidgetNameHere":
(your code here)