IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Glisser-déposer dans un QTreeWidget


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut Glisser-déposer dans un QTreeWidget
    Hello !

    Je suis en train de regarder comment faire un drag & drop d'éléments dans un QTreeWidget. Il faut mettre les bonnes options et redéfinir la méthode dropEvent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class TreeWidget : public QTreeWidget
    {
    protected:
     
      virtual void dropEvent(QDropEvent *event) override
      {
        QModelIndex index = indexAt(event->pos());
        if (!index.isValid()) {  // just in case
          event->setDropAction(Qt::IgnoreAction);
          return;
        }
     
        QTreeWidgetItem* item = itemFromIndex(index);
        qDebug() << "drop on item" << item->text(0);
     
        QTreeWidget::dropEvent(event);
      }
    };
     
    int main()
    {
      TreeWidget *listWidget = new TreeWidget;
      listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
      listWidget->setDragEnabled(true);
      listWidget->viewport()->setAcceptDrops(true);
      listWidget->setDropIndicatorShown(true);
      listWidget->setDragDropMode(QAbstractItemView::InternalMove);
    }
    Mais dans mon cas j'aimerai pouvoir ne bouger que les éléments parents. Dans le code je récupère l'élément d'arrivée (item), mais comment avoir l'élément déplacé ??

    Faut-il redéfinir une méthode drag ?? Lancer le drag nous même depuis mousePressEvent ?? Je suis un peu perdu pour faire ça proprement, je ne trouve pas de méthode propre.

    Merci.

  2. #2
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Tu as normalement le pendant du dropEvent (l'arrivée du drag&drop), le drag-event (le départ du drag&drop) où tu pourras vérifier ce que l'utilisateur sélectionne.
    Il y a 3 fonctions de drag différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    virtual void dragEnterEvent(QDragEnterEvent *event)
    virtual void dragLeaveEvent(QDragLeaveEvent *event)
    virtual void dragMoveEvent(QDragMoveEvent *event)

  3. #3
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Bonjour Maluna,
    Je pense que la manière la plus propre est de gérer ça est en remplaçant le QTreeWidget par un QAbstractItemModel + QTreeView.
    http://doc.qt.io/qt-5/qtwidgets-item...l-example.html
    Avec la classe dérivée de QAbstractItemModel, tu pourras écrire des méthodes pour gérer proprement le drag and drop comme expliqué ici:
    http://doc.qt.io/qt-5/model-view-pro...ith-item-views
    En plus, l'avantage d'utiliser un QAbstractItemModel, c'est d'éviter la duplication des données. Car avec un QTreeViewWidget, les données sont soit uniquement dans les classes dans la vue, soit elles sont dupliquées dans la vue et le modèle (il y alors une synchronisation a gérer qui peut être source de bug).
    J'espère que cette piste va t'aider.
    Cédric

Discussions similaires

  1. Problème de glisser-déposer sur un QTreeWidget
    Par JakRenegade dans le forum Débuter
    Réponses: 1
    Dernier message: 25/05/2014, 17h17
  2. [Graphics View] Glisser-déposer dans un QWiget personnalisé
    Par mitmal dans le forum Qt
    Réponses: 3
    Dernier message: 10/11/2011, 16h02
  3. Glisser-déposer dans une liste javafx
    Par Stefounette dans le forum JavaFX
    Réponses: 7
    Dernier message: 15/04/2010, 09h53
  4. Réponses: 2
    Dernier message: 22/02/2006, 14h33
  5. [MFC] Glisser/Déposer dans une CView
    Par octopus984 dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo