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 :

afficher l'arbre DOM sous forme QTree


Sujet :

Qt

  1. #1
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut afficher l'arbre DOM sous forme QTree
    salut ,

    j'ai fait la construction de l'arbre DOM d'une page HTML est je veux afficher cette arbre sous forme d'un QTree ou lieu de l'afficher sous le console,

    j'ai vu les exemples fournis avec Qt4 mais sont tres complex , je doit le faire avec quelles classes de Qt4 QTreeWidgetItem ou QtreeView ??
    quel est la difference entre les deux ??

    merci pour tout aide ,,

  2. #2
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    salut,,

    pour la construction de tree je veux savoir si il obliger de passer par models voila ma procedure de construction de DOM
    :
    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
    30
    31
    32
    33
    34
    35
    int Dom::Arbre_DOM(QDomNode node,int level) 
    {
       QDomNodeList listnode;  
       QDomElement e,enode;
     
     
     
       enode = node.toElement();
    { QString s;
    	   QTextStream stream(&s);
    	   for (int i=0;i<level;++i) stream<<"| ";
    	   stream<<enode.tagName();
    	   qDebug() << s ;        
    }
     
     
     
     
    		if  (node.hasChildNodes ()){
     
     
                        listnode = node.childNodes();       
     
     
                           for(int i=0; i<listnode.length() ; i++) {e = node.toElement(); 
                                                                if (e.tagName()=="a") {extraire_href(e); }
                                                                if (e.tagName()=="script") {extraire_script_src(e); }
     
                                                                Arbre_DOM(listnode.item(i),level+1);
     
          			                                    }   
     
                                                 }
     
    }
    je savait le niveau de chaque balises il suffit juste l'afficher dans un tree ,, a ce que je peut utiliser QTreeView dans cette procedure sans cree une autre classe models comme les exemples fourni avec Qt4?? c'est la premiere fois que je vais programmer avec QtreeView je veux juste savoir s'il est possible de le faire avant que j'essai ??

    merci pour tout aide ,,

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    C'est à toi de voir ce qui te semble le plus simple.
    Déjà, as tu regardé
    http://qt.developpez.com/doc/latest/...edommodel.html

  4. #4
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Salut.
    C'est à toi de voir ce qui te semble le plus simple.
    Déjà, as tu regardé
    http://qt.developpez.com/doc/latest/...edommodel.html
    merci pour la reponse
    j'ai vu l'exemple il est complexe l'exemple de la F.A.Q Qt est plus simple il a bien m'aider pour commancer a construire le tree ,,
    j'ai ajouter ses instructions a ma procedure :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    int Dom::Arbre_DOM(QDomNode node,int level,QDomElement parent) 
    {
     int i;
    if (level==0)//la racine c'est html
           {
           parentitem->setText(0,"html");
            }
     
     
       QDomNodeList listnode;  
       QDomElement e,enode;
     
     
     
       enode = node.toElement();
     
    { QString s;
    	   QTextStream stream(&s);
    	   for (int i=0;i<level;++i) {stream<<"| "; }
    	    stream<<enode.tagName();
    // afficher tous les noeuds comme des item
    	    {
                item = new QTreeWidgetItem(parentitem);
    	    item ->setData (level, 0,enode.tagName());  
                }
              qDebug() << s ;
     
    }
     
     
     
    		if  (node.hasChildNodes ()){ 
     
     
                        listnode = node.childNodes();       
     
     
                           for(i=0; i<listnode.length() ; i++) {   e = node.toElement();
     
                                                                if (e.tagName()=="a") {extraire_href(e); }
                                                                if (e.tagName()=="script") {extraire_script_src(e); }    
     
                                                                Arbre_DOM(listnode.item(i),level+1,parent);
     
          			                                    }   
     
                                                 }
     
    }
    mais si le fils"body" de noeud "html" par exemple possede des fils il faut que soit un nouveau QTreeWidgetItem hirite de parentitem !!
    vous pouvez me donner des idées pour le faire ?? normalement ce fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QTreeWidgetItem *html = new QTreeWidgetItem(parentitem);
                      html->setText(0,"html");
                     item->addChild(html); 
                     QTreeWidgetItem*item = new QTreeWidgetItem(html);
    		  item ->setData (1, 0, e.tagName());
    mais comme la fonction est recurcive j'ai pas arriver a integrer ??
    merci pour tout aide ,

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    quel exemple de la FAQ??
    sinon fait un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int Dom::Arbre_DOM(QDomNode node,int level,QTreeWidgetItem *parentitem) 
    {
    ...
    QTreeWidgetItem *currenttitem = new QTreeWidgetItem (parentitem);
    ...
     
    }
    L'utilisation de QtreeWidget est plus simple à comprendre, mais l'utilisation de QTreeView offre plus de possibilité. A toi de voir ce qui te correspond.

  6. #6
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    quel exemple de la FAQ??
    sinon fait un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int Dom::Arbre_DOM(QDomNode node,int level,QTreeWidgetItem *parentitem) 
    {
    ...
    QTreeWidgetItem *currenttitem = new QTreeWidgetItem (parentitem);
    ...
     
    }
    L'utilisation de QtreeWidget est plus simple à comprendre, mais l'utilisation de QTreeView offre plus de possibilité. A toi de voir ce qui te correspond.
    merci pour la reponse ,
    je suis entrain d'essayer votre idée ,,
    l'exemple de la FAQ http://qt.developpez.com/faq/?page=q...er_qtreewidget
    merci pour tout aide ,

  7. #7
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    quel exemple de la FAQ??
    sinon fait un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int Dom::Arbre_DOM(QDomNode node,int level,QTreeWidgetItem *parentitem) 
    {
    ...
    QTreeWidgetItem *currenttitem = new QTreeWidgetItem (parentitem);
    ...
     
    }
    L'utilisation de QtreeWidget est plus simple à comprendre, mais l'utilisation de QTreeView offre plus de possibilité. A toi de voir ce qui te correspond.
    salut ,,
    j'ai fait plusieurs essais mais toujour me donne n'importe quoi !!
    voila la derniere solution que j'ai fait , vous pouvez me donner plus des idées pour le couriger??
    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
    30
     
    int Dom::Arbre_DOM(QDomNode node,int level,QDomElement parent,QTreeWidgetItem *parentitem) 
    {
     int i;       
     
       QDomNodeList listnode;  
       QDomElement e,enode;
     
       enode = node.toElement();
     
                     currenttitem = new QTreeWidgetItem (parentitem); 
     
    		if  (node.hasChildNodes ()){ 
     
                        listnode = node.childNodes();       
     
     
                           for(i=0; i<listnode.length() ; i++) {  e = node.toElement();   
                                                                  currenttitem->setText(0,listnode.item(i).toElement().tagName());
                                                                   currenttitem->addChild(parentitem);
                                                                   item = new QTreeWidgetItem(currenttitem);
    	                                                        item ->setData (level, 0,node.toElement().tagName());  
                                                                    parentitem=currenttitem; 
                                                                   Arbre_DOM(listnode.item(i),level+1,parent,parentitem);
     
          			                                    }   
     
                                                 }
     
    }
    merci pour tout aide ,,

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    currenttitem = new QTreeWidgetItem (parentitem); 
    ...
    currenttitem->addChild(parentitem);
    le père est aussi le fils de son fils??? c'est tordu ca!!!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parentitem=currenttitem;
    Pourquoi???????

  9. #9
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    currenttitem = new QTreeWidgetItem (parentitem); 
    ...
    currenttitem->addChild(parentitem);
    le père est aussi le fils de son fils??? c'est tordu ca!!!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parentitem=currenttitem;
    Pourquoi???????
    salut ,, merci pour la reponse ,,,
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    currenttitem = new QTreeWidgetItem (parentitem); 
    ...
    currenttitem->addChild(parentitem);
    j'ai fait une erreur c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    currenttitem = new QTreeWidgetItem (parentitem); 
    ...
    item->addChild(parentitem);
    comme je suis dans la condition node.haschild alos il faut cree un new Qtree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    currenttitem = new QTreeWidgetItem (parentitem);
    puis j'ai lui ajouter a son parrent et j'ai fait la mise a jour de parent pour la prochaine appelle de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parentitem=currenttitem
    mais l'arbre n'a plus de sens vu que je l'ai modifié pas mal de fois, j'arrive plus à me retrouver..
    merci pour tout aide ,,

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Ca devrait resembler un truc comme ca.
    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
    int Dom::Arbre_DOM(QDomNode node,int level,QTreeWidgetItem *pParentitem) 
    {
     	QDomNodeList listnode;  
    	QDomElement currentElement;
    	QTreeWidgetItem *pCurrenttItem;
     
    	//je construie le noeud courant
    	pCurrenttItem = new QTreeWidgetItem (pParentitem); 
     
    	//si le noeud est un element j'affiche son tag
    	if (node.isElement())
    	{
    		currentElement = node.toElement();
    		pCurrenttItem ->setData (0, Qt::DisplayRole,currentElement.tagName());  
    	}
     
    	//j'itère sur ses enfant récursivement
    	listnode = node.childNodes();       
    		for(i=0; i<listnode.length() ; i++) 
    		{  
    			Arbre_DOM(listnode.item(i),level+1,pCurrenttItem);
    		} 
    }
    Pour ce qui est de setData, il faut que tu comprenne à quoi sert role.
    http://qt.developpez.com/doc/latest/...m.html#setData

  11. #11
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Ca devrait resembler un truc comme ca.
    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
    int Dom::Arbre_DOM(QDomNode node,int level,QTreeWidgetItem *pParentitem) 
    {
     	QDomNodeList listnode;  
    	QDomElement currentElement;
    	QTreeWidgetItem *pCurrenttItem;
     
    	//je construie le noeud courant
    	pCurrenttItem = new QTreeWidgetItem (pParentitem); 
     
    	//si le noeud est un element j'affiche son tag
    	if (node.isElement())
    	{
    		currentElement = node.toElement();
    		pCurrenttItem ->setData (0, Qt::DisplayRole,currentElement.tagName());  
    	}
     
    	//j'itère sur ses enfant récursivement
    	listnode = node.childNodes();       
    		for(i=0; i<listnode.length() ; i++) 
    		{  
    			Arbre_DOM(listnode.item(i),level+1,pCurrenttItem);
    		} 
    }
    Pour ce qui est de setData, il faut que tu comprenne à quoi sert role.
    http://qt.developpez.com/doc/latest/...m.html#setData
    merci pour la reponse,
    je l'ai fait est ca marche tres bien ,,
    mais il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pCurrenttItem ->setData (0, Qt::DisplayRole,currentElement.tagName());
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pCurrenttItem ->setData (level, Qt::DisplayRole,currentElement.tagName());
    merci beaucoup pour l'aide ,

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    pourquoi 0 par level???

    tu veut level colonne???
    normalement tu fait un colonne pour le nom une colone pour autre chose etc etc

  13. #13
    Membre du Club Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    pourquoi 0 par level???

    tu veut level colonne???
    normalement tu fait un colonne pour le nom une colone pour autre chose etc etc
    merci,,
    oui c'est vrais ,j'ai fait "level" par ce que j'ai pas fait attention que je peux agrandir la largueure d'une colonne ,, alors comme la colonne n'est pas assez large j'ai penser qu'il n'a pas afficher les resultats

    mais je l'ai corriger apres ,,

    merci pour tout aide ,,,

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

Discussions similaires

  1. C - Afficher valeur d'entier sous forme "machine"
    Par IgiXphp dans le forum Débuter
    Réponses: 6
    Dernier message: 28/01/2011, 15h20
  2. Afficher ma donnée Base64Binary sous forme d'image
    Par tarekos dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 03/06/2008, 17h08
  3. Affiché le fichier séléctionner sous forme de texte
    Par Jeremy0201 dans le forum Tkinter
    Réponses: 1
    Dernier message: 08/07/2007, 15h45
  4. Afficher un programme C sous forme d'un graphe
    Par progfou dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 28/02/2006, 17h03
  5. XSL pour visualiser arbre XML sous forme de tableau en HTML
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/03/2003, 10h55

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