0

QListWidget のアイテムを「ゴミ箱」(ドロップを受け入れて何もしないサブクラスのウィジェット) にドラッグできるようにしようとしています。

もし私setDropAction(Qt.MoveAction)がソースから削除しようとしているアイテムが自動的に削除されることを知っています。これは正しく動作します。
私の問題は、ソースのコンテンツに依存する他のウィジェットを更新するアクションもトリガーする必要があることです。

項目が実際にソースから削除される前に dropEvent が発生するように私には思えます。私はこの問題を理解しようとしてひどい時間を過ごしています。私は2つの可能な解決策を考えました:

  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 に答える