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 :

Modèle-vue : insertion d'enfant


Sujet :

Qt

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut Modèle-vue : insertion d'enfant
    Bonjour tout le monde,

    J'ai une QTreeview qui affiche un modèle contenant 2 colonnes par item. Chaque item contient un booléen et un nom. Je tiens à préciser que je ne souhaite pas utiliser QStandardItem et QStandardItemModel car je vais rajouter des éléments dans chacun de mes items. De plus je ne souhaite pas utiliser QTreeWidget car je dois partager mon modèle à travers mon application.

    Pour ajouter un item, je récupère le QModelIndex courant avec la méthode QTreeWidget::selectionModel()->currentIndex(), puis je récupère le nombre d'enfant associés à l'item et j'insère une nouvelle ligne à partir de l'index courant.
    Cette méthode fonctionne lorsque je sélectionne la première colonne de mon item mais lorsque je sélectionne la seconde, j'obtiens n'importe quoi (cf les images).

    Nom : treeView_Expected.png
Affichages : 248
Taille : 4,3 Ko Comportement attendu

    Nom : treeView_Wrong.png
Affichages : 243
Taille : 11,3 Ko Comportement bizarre lorsque je sélectionne mon item à partir de la seconde colonne et j'ajoute un nouvel item.

    Pour info, quelque soit la colonne sélectionnée, j'obtiens bien le bon item associé. De plus, l'item enfant est correctement ajouté dans mon modèle.

    Voici les bouts de codes qui me permettent d'ajouter un item à mon model.

    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
    //Partie vue
    void TreeView::on_addButton_clicked()
    {
    	QModelIndex index = ui->treeView->selectionModel()->currentIndex();
     
    	Model * model = static_cast<Model*>(ui->treeView->model());
    	int row = 0;
    	Item * currentItem = model->getItem(index);
            // Récupère la taille des enfants pour ajouter une ligne à la fin
    	row = currentItem->children().size();
    	model->insertRow(row, index);
    }
     
    //Partie Modèle
    bool Model::insertRows(int row, int count, const QModelIndex &parent)
    {
    	Item *parentItem = getItem(parent);
    	bool success;
     
    	beginInsertRows(parent, row, row + count - 1);
    	success = parentItem->insertChildren(row, count);
    	endInsertRows();
     
    	return success;
    }
    Je n'arrive pas à comprendre ce que je fais de travers. Un peu d'aide svp?

    Merci!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour,

    Peut-être le problème est dû à l'appel de beginInsertRows(parent, row, row + count - 1); lorsque parent ne "pointe" pas sur la première colonne.

    Que se passe-t-il avec la modification suivante?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Partie vue
    void TreeView::on_addButton_clicked()
    { 
    	Model * model = static_cast<Model*>(ui->treeView->model());
            QModelIndex selectedIndex = ui->treeView->selectionModel()->currentIndex();
            //Force l'index sur la colonne 0
    	QModelIndex index = model->index(selectedIndex->row(), 0, selectedIndex->parent());
    	int row = 0;
    	Item * currentItem = model->getItem(index);
            // Récupère la taille des enfants pour ajouter une ligne à la fin
    	row = currentItem->children().size();
    	model->insertRow(row, index);
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Merci pour ton aide!!

    Ton code fonctionne parfaitement!! (par contre selectedIndex n'est pas un pointeur )

    Effectivement, je ne forçais pas l'ajout à la colonne 0, du coup, il devait y avoir un espèce d'overflow qui faisait un truc bizarre!

    Merci encore!

Discussions similaires

  1. Modèle/vue , modèle personnalisé
    Par Kymic dans le forum Qt
    Réponses: 4
    Dernier message: 01/08/2009, 17h15
  2. Compteur de vues, INSERT & UPDATE
    Par timathias dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/09/2008, 15h50
  3. [MVC] Communication Modèle, Vue
    Par dahtah dans le forum MVC
    Réponses: 4
    Dernier message: 25/10/2007, 17h25
  4. Champ de texte et MVC (modèle vue contrôleur)
    Par three minute hero dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2007, 11h04
  5. [JSP][Servlet][Javabean] Modèle Vue Controleur
    Par ay_pepito dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/02/2004, 10h05

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