2012-07-20 5 views
0

J'essaie de faire glisser des éléments d'un QListWidget vers une "Corbeille" (un widget sous-classé qui accepte les gouttes et ne fait rien avec eux).Action de déclenchement à la fin de l'action de glissement

Je sais que si je setDropAction(Qt.MoveAction), les éléments que je supprime de la source seront automatiquement supprimés. Cela fonctionne correctement.
Mon problème est que j'ai également besoin de déclencher une action qui met à jour d'autres widgets qui dépendent du contenu de la source.

Il me semble que l'événement dropEvent se produit avant que les éléments ne soient réellement supprimés de la source. J'ai du mal à comprendre ce problème. J'ai pensé à deux solutions possibles:

  1. trouver un moyen d'intégrer les références aux QListWidgetItems réelles qui sont traînés dans QMimeData de l'événement. Cela me permettrait de faire les suppressions à la main avant de déclencher des mises à jour.

  2. Déterminez comment attendre que la source soit automatiquement effacée, mais je ne trouve aucun signal qui se déclenche lorsque des éléments sont automatiquement supprimés d'une liste.

Répondre

0

Aha!

La clé qui me manquait était la méthode mimeData. Cette méthode est appelée quand un drag est démarré, et dans ce que je suis passé une liste de tous les fichiers en cours de glissement.

J'ai d'abord construit le méta-objet à renvoyer, puis j'ai supprimé les fichiers en train d'être tirés de la liste, et j'ai appelé l'action d'actualisation dont j'avais besoin.

Voici un exemple:

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 
Questions connexes