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 d'un QTreeWidgetItem contenant un QWidget


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut Glisser/déposer d'un QTreeWidgetItem contenant un QWidget
    Bonjour à tous,

    J'utilise un QTreeWidget contenant des QTreeWidgetItem mais sur lesquels je dessine des QWidget personnalisé. Pour Définir le widget sur le QTreeWidgetItem, j'utilise la fonction setItemWidget()

    Mon problème est que durant un glisser/déposer (drag & drop), le widget personnalisé est perdu. Je tente donc de le récupérer juste avant le drop (dropEvent) et de le redéfinir juste après. Cela marche si je créer un nouveau widget mais pas si j'essaye de réutiliser le pointeur du widget présent avant le drag.

    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
    void TreeWidget::dropEvent(QDropEvent *event)
    {
        QTreeWidgetItem *dragItem = this->currentItem(); // Récupère l'item
        ColoredWidget *colorWidget = static_cast<ColoredWidget*>(this->itemWidget(dragItem, 0)); // Récupère le widget
     
        QTreeWidget::dropEvent(event); // Classique drop effectué par QTreeWidget
     
        // Le widget est alors perdu == NULL
        //ColoredWidget *colorWidgetAfter =static_cast<ColoredWidget*>(this->itemWidget(dragItem, 0));
     
        // Si je créer un nouveau widget avec les mêmes attributs, cela fonctionne
        /*ColoredWidget *newColorWidget = new ColoredWidget(colorWidget->Name(), colorWidget->Color());
        this->setItemWidget(dragItem, 0, newColorWidget);*/
     
       // Si je tente d'utiliser l'ancien pointeur du widget toujours valide, ça ne fonctionne plus...
        this->setItemWidget(dragItem, 0, colorWidget);
    }
    Est ce que vous avez une meilleure solution que cette méthode ?
    Savez vous pourquoi je ne peux pas re-utilisé la pointeur valide du widget présent avant le drag ?



    PS : en pièce jointe le prototype en entier !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Tu peux "détacher" le widget de l'item avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QTreeWidgetItem *dragItem = this->currentItem(); // Récupère l'item
    ColoredWidget *colorWidget = static_cast<ColoredWidget*>(this->itemWidget(dragItem, 0)); // Récupère le widget
    if (colorWidget)
        editorDestroyed(colorWidget);
     
    QTreeWidget::dropEvent(event);
    Ça ne fait pas très propre, mais toutes les autres méthodes semblent effacer le widget sans demander.

    Mais ce serait peut-être plus simple de créer un delegate avec un éditeur ouvert en permanence.

  3. #3
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par alexisdm Voir le message
    Ça ne fait pas très propre, mais toutes les autres méthodes semblent effacer le widget sans demander.
    Merci beaucoup pour cette méthode que je ne connaissais pas, c'est exactement ce que je cherchais.

    Citation Envoyé par alexisdm Voir le message
    Mais ce serait peut-être plus simple de créer un delegate avec un éditeur ouvert en permanence.
    Malheureusement je ne peux pas utiliser les delegate pour d'autres raisons, mais j'y avais pensé


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. QWidget et glisser-déposer
    Par vincentcpp dans le forum Débuter
    Réponses: 4
    Dernier message: 30/01/2014, 15h47
  2. Glisser-déposer entre QWidget différents
    Par EvaBraun dans le forum Débuter
    Réponses: 1
    Dernier message: 24/11/2012, 10h59
  3. Paramétrage du glisser-déposer selon l'application cible
    Par annedeblois dans le forum Windows
    Réponses: 3
    Dernier message: 17/10/2005, 21h57
  4. Glisser déposer sur formulaire
    Par norvel dans le forum Access
    Réponses: 5
    Dernier message: 03/10/2005, 11h20
  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