0

我试图允许将 QListWidget 中的项目拖到“垃圾箱”(一个接受丢弃并且不对其执行任何操作的子类小部件)。

我知道如果我setDropAction(Qt.MoveAction),我从源中删除的项目将被自动删除。这可以正常工作。
我的问题是我还需要触发一个操作来更新依赖源内容的其他小部件。

在我看来,dropEvent 发生在实际从源中删除任何项目之前。我很难弄清楚这个问题。我想到了两种可能的解决方案:

  1. 找到一种方法将引用嵌入到事件的 QMimeData 中被拖动的实际 QListWidgetItems。这将允许我在触发更新之前手动删除。

  2. 弄清楚如何等到源被自动清除,但我找不到在自动从列表中删除项目时触发的任何信号。

4

1 回答 1

0

啊哈!

我缺少的关键是mimeData方法。当开始拖动时调用此方法,并在其中传递了所有正在拖动的文件的列表。

我首先构建了要返回的元对象,然后我删除了从列表中拖动的文件,并调用了我需要的刷新操作。

这是一个例子:

def mimeData(self, items):
    m = QMimeData()
    m.setUrls([QUrl(i.url) for i in items])

    # Clean up the list:
    [self.files.takeItem(self.files.indexFromItem(i).row()) for i in items]
    self._update_meta()

    return m
于 2012-07-21T16:14:08.153 回答