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

Discussion :

Supprimer un QListWidgetItem

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Par défaut Supprimer un QListWidgetItem
    Bonjour à tous,

    Je me posais la question sur la gestion mémoire des QListWidgetItem.
    Admettons que j'ai un conteneur QlisteWidget et quelques items à insérer à l'interieur instanciés de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QListWidget *m_Conteneur = new QListWidget();
    QListWidgetItem *m_Item1 = new QListWidgetItem();
    QListWidgetItem *m_Item2 = new QListWidgetItem();
    QListWidgetItem *m_Item3 = new QListWidgetItem();
    L'insertion se passe comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    m_Conteneur->addItem(m_Item1);
    m_Conteneur->addItem(m_Item2);
    m_Conteneur->addItem(m_Item3);
    et maintenant je voudrais supprimer ces items du conteneur, de manière à être sur qu'ils ne soient pas perdus en mémoire quelque part.

    Je voulais savoir si "m_Conteneur.clear()" pourrait correspondre?
    Et sinon, faire une boucle telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                for(int i = 0; i<=m_Conteneur.count();i++)
                {
                    delete m_Conteneur->item(0);
                }
    En utilisant ces méthodes, ma mémoire grandit lors de l'ajout en masse de QListWidgetItem, mais ne reprend pas sa taille d'origine lors de la suppression de ces derniers.
    Ce qui est très embêtant comme vous pouvez vous en douter

    Y'a t'il une manière de procéder pour faire un beau delete?

    Merci d'avance pour vos lumières, bonne journée.

  2. #2
    Membre confirmé Avatar de sebmag
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2009
    Messages : 52
    Par défaut
    Bonjour,

    As-tu essayé avec removeItemWidget(QListWidgetItem * item) ?

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Par défaut
    Cette fonction implique t'elle le besoin de connaitre le nom de l'item?
    Parce qu'en fait après je n'ai plus le nom.

    Donc pour supprimer je dois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_Conteneur->removeItemWidget(m_Conteneur->item(indiceLigne));
    Je viens d'essayer, la mémoire ne descend pas non plus...

  4. #4
    Membre confirmé Avatar de sebmag
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2009
    Messages : 52
    Par défaut
    Et tu veux tous les supprimer ou seulement certains ?

    car si tu veux tous les supprimer tu n'as pas besoins de connaitre le nom de chaque item !

    tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i = 0; i<=m_Conteneur.count();++i)
    {
         m_Conteneur->removeItemWidget(m_Conteneur->item(i));
    }
    Bien sûr ce code ne supprime que les items qui sont à l'intérieur de ta QListWidget !

    Si tu souhaites les supprimer de la mémoire il faut passer par un delete.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Par défaut
    Je voudrais tout supprimer, ce qui veux dire dans le QListWidget mais aussi en mémoire.
    Avec removeItemWidget si je fais un qDebug sur le count avant et après j'ai le même nombre...
    Par contre, si j'utilise un delete, le count d'après me retourne la moitié du count d'avant!
    Je ne comprends pas trop du coup.

  6. #6
    Membre confirmé Avatar de sebmag
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2009
    Messages : 52
    Par défaut
    bon, je n'ai pas ton code sous les yeux mais ce que tu peux éventuellement faire c'est un delete sur ton conteneur !

    ou sinon un delete sur chaque item
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    delete m_item1;
    delete m_item2;
    ...

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16
  3. Supprimer la premiere ligne d'un fichier
    Par Kahiba dans le forum Langage
    Réponses: 7
    Dernier message: 11/02/2003, 10h18
  4. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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