from PyQt4.QtCore import QObject, QEvent
class QLineEditDropHandler(QObject):
def eventFilter(self, watched, event):
if event.type() == QEvent.DragEnter:
# we need to accept this event explicitly to be able to receive QDropEvents!
event.accept()
if event.type() == QEvent.Drop:
md = event.mimeData()
if md.hasUrls():
obj.setText(url.toLocalFile())
return True
return super().eventFilter(watched, event)
Erics答案的一个稍微改进的版本(我希望)是一个注入器的简短实现,该注入器能够为现有的objet添加拖放功能。这对我和QtDesigner一起设计有帮助-
将上述内容保存在单独的文件中-(例如_lineEdit.py) 然后按以下方式使用它- #使用示例:
^{pr2}$使用上面提到的eventFilter机制时,可以这样使用:
现在,可以在任何行编辑中使用drop处理程序,而无需子类化:
^{pr2}$通常,对于事件,可以使用QObject.eventFilter以及QObject.installEventFilter拦截事件并处理它们。然而,它似乎不适用于QDrag/QDrop事件(如果我在这一点上错了-其他人请告诉我,因为我已经把我的头发都拔出来了,想办法让它与过滤一起工作)。在
我所知道的最好的方法是,您必须将QLineEdit子类化,并重载dragEnterEvent、dragmovevent和dropEvent方法,以检查拖入类中的内容是否有效。比如:
相关问题 更多 >
编程相关推荐