将外部文件拖入QTreeWidget

4 投票
1 回答
1021 浏览
提问于 2025-04-17 05:35

我想实现的功能可能在QTreeWidget中有些不同,但我希望能够把外部文件,特别是图片或视频文件,拖放到我的QTreeWidget里。我不是想把它拖到某个特定的QTreeWidgetItem里,而是想直接放到整个树上。以下是我的代码:

class moTree(QTreeWidget):
    def __init__(self, parent):
        super(moTree, self).__init__(parent)
        self.setMouseTracking(True)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls:
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasUrls:
            for url in event.mimeData().urls():
                #Handle stuff here
        else:
            event.ignore()  

我可以看到dragEnterEvent这个事件被调用了,但dropEvent却没有被调用,而且我看到一个“被阻止”的图标。你们知道这是为什么吗?

1 个回答

6

你需要重新实现 QTreeWidget.mimeTypes 这个功能,让它返回你想要支持的 类型 列表:

def mimeTypes(self):
    return QtCore.QStringList([
        'text/uri-list',
        'application/x-qabstractitemmodeldatalist',
        ])

撰写回答