将QWidget拖放到Maya中

时间:2016-04-04 13:30:35

标签: qt drag-and-drop maya

我在QListWidget中有一个带有纹理资源等的库。我想将小部件拖放到QApplication中,在我的案例中是Maya。 如何将dropEvent与Maya连接,以便maya注册已删除的内容? 请有人指出我正确的方向。

2 个答案:

答案 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个拖放事件。

希望它对你有所帮助,问你是否不明白如何实现它。