完成拖动操作时触发操作

时间:2012-07-20 19:52:22

标签: qt events drag-and-drop mime

我正在尝试将QListWidget中的项目拖动到“Trash”(一个子类窗口小部件,它接受drop并且不对它们执行任何操作)。

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

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

  1. 找到一种方法来嵌入对事件的QMimeData中拖动的实际QListWidgetItem的引用。这样我就可以在触发更新之前手动删除。

  2. 弄清楚如何等待源自动清除,但是当项目从列表中自动删除时,我找不到任何信号。

1 个答案:

答案 0 :(得分: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