我在QListWidget中有一个带有纹理资源等的库。我想将小部件拖放到QApplication中,在我的案例中是Maya。 如何将dropEvent与Maya连接,以便maya注册已删除的内容? 请有人指出我正确的方向。
答案 0 :(得分:0)
经过一些严肃的反复试验,我找到了一个实际上非常直接的解决方案,因为大多数情况都是如此...... 所以主要是在我的案例maya中使用主应用程序注册事件。
main_win = mhelper.getQMayaMainWindow()
main_win.installEventFilter(drop_filter)
然后在事件过滤器中我需要检查被调用的事件:
def eventFilter(self, obj, event):
self.obj = obj
if event.type() is event.DragEnter:
self.mouse_button = QtGui.QApplication.mouseButtons()
event.accept()
if event.type() is event.Drop:
library_w = event.source()
if self.mouse_button == QtCore.Qt.LeftButton:
....
答案 1 :(得分:0)
我认为你不能正确处理maya主窗口上的drop事件,但有一件事是肯定的,你可以在每个QtWidget上执行。在我的情况下,我在我的qt主窗口上做了。
class Droper(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Droper, self).__init__(parent)
self.setAcceptDrops(True) # Very important
def dragEnterEvent(self, event):
"""
The event called when the user drag elements over the drop place
"""
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
print "We don't want this !"
def dropEvent(self, event):
"""
The event called when the user drops its elements
Only if dragEnterEvent accept the event
"""
for url in event.mimeData().urls():
print url
您需要在窗口小部件上启用acceptDrops,您可以直接在Qt Designer中的属性中执行此操作。您还需要定义要使用的事件,请参阅QWidget.dragEnterEvent以查看4个拖放事件。
希望它对你有所帮助,问你是否不明白如何实现它。