我需要对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.DropQtCore.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)

09-08 00:13