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 :

QListView : encapsulation/affichages


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut QListView : encapsulation/affichages
    Bonjour,
    J’ai créé un QlistView par le designer que j’appelle listView.

    Apres avoir tapé :
    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
    class Test
    {
    	QlistViewItem * item;
    	Test()
            {
                 item = NULL;
            }
    edit: 
           ~Test() 
           {
                 delete item;
            }
    
    };
    void prgm::testouille()
    {
    	Test test;
    	test.item = new QlistViewItem(listView, “a” , “b”);
    	// test.item->setOpen(true); //=> que dalle
    	// listView->insertItem(test.item); // => que dalle
    }
    Le programme ne m'affiche rien dans la listView. Pire, il me refile une "fatal error" lorsque j'essai d'intégrer l'objet test dans un vector de la STL. (std::vector<Test> testVector
    Je l’ai transformé en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void prgm ::testouille()
    {
    QListViewItem * t ;
    // QlistViewItem * t2; 	// => test pour essayer de remplacer t2 par Test
    t = new QlistViewItem(listView, »a », « b »);
    // t2 = t;
    }
    Et là, impec… je ne comprends pas.
    Bien sur, j’ai retrafiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void prgm ::testouille()
    {
    	QlistViewItem * t ;
    	Test test ;
    	t  = new QlistViewItem(listView, »a », « b »);
    	test.item = t;
    }
    Mais là, il n’y a rien d’affiché dans ma listview, même en rajoutant setOpen, ou d’autres insertItem… ???
    Dés que j'essai d'encapsuler un pointeur de QListViewItem, plus rien n'est affiché. Ca me fait penser... Faut-il hériter quelque chose? J'ai bien essayé avec QListView mais ça ne donne rien.
    En même temps, je ne vois pas pourquoi j'aurais besoin d'hériter quoiqeu ce soit alors que je "manipule" seulement un pointeur (juste une affectation gauche, donc le droit ne devrait pas être modifié)...

    J’aimerais comprendre

    ps: je tourtne sous l'édition non-commercial de QT version 3.2.1 ... sous windows

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par ledjlale
    Et là, impec… je ne comprends pas.
    Moi non plus. Le code est identique. Je vois deux explications :
    1. Ce n'est pas là la seule différence entre le code qui marche et celui qui ne marche pas. Il y a eu un autre changement.
    2. La classe Test n'est en réalité pas aussi simple qu'indiqué ici. Par exemple, est-ce qu'elle n'aurait pas un destructeur ?
    En tout état de cause il faudrait fournir un programme d'exemple minimal mais complet qui reproduise le problème.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    haaaaaaaaaaaa oui mais quel con!

    Il y a effectivement un destructeur qui nettoie ses pointeurs et comme il est appelé à la fin du bloc, l'item n'existe plus.
    Comme l'allocation se fait en externe, alors l'objet ne devrait pas avoir la main (je l'avais mis pour être sur de ne pas avoir de fuite mémoire ... :/).

    J'ai honte mais Merci!

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

Discussions similaires

  1. Affichage de QListView / QStandardItemModel
    Par spirzouf dans le forum Débuter
    Réponses: 3
    Dernier message: 09/10/2011, 19h42
  2. Réponses: 1
    Dernier message: 08/06/2011, 20h29
  3. Réponses: 0
    Dernier message: 06/04/2010, 18h00
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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