【发布时间】:2016-12-13 03:00:40
【问题描述】:
我需要响应 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 中的其他操作,例如单击、丢失焦点等)
【问题讨论】:
-
尝试在 QListWidget 的视口上安装事件过滤器
-
@Schollii 非常感谢。在 viewport() 上安装事件过滤器确实会触发事件。然后问题变成了 QT 直到事件之后才处理 QListWidget 中 QItems 的重新排序。不过,我确实找到了解决方案:使用 ChildRemoved 事件。显然,QT 在拖放重新排序时发出该事件。