Question

Je suis resté coincé pour essayer d'obtenir la vue hiérarchique d'un arbre de widgets.

Le code fonctionne bien et génère un bel arbre comme celui-ci:

ROOT(Animal): 
| 
| 
|___Not extinct:
.         |                       (red)
.         |_____BIRD--------------(blue)
.         |                       (green)
          | 
          |                       (red)
          |_____Mammal------------(blue)
          |                       (green)
          | 
          |                       (red)
          |_____Reptile-----------(blue)
                                  (green)

Voici le code avec la hiérarchie de l'arbre:

def myTreeWDG(self):
    ....
    """define tree"""
    self.obj_animalTreeWDG = QtGui.QTreeWidget(self.obj_viewGroupBox)
    self.obj_animalTreeWDG.setGeometry(QtCore.QRect(10, 20, 191, 131))
    self.obj_animalTreeWDG.setObjectName("obj_animalTreeWDG")
    """ROOT: animal"""
    obj_parent1 = QtGui.QTreeWidgetItem(self.obj_animalTreeWDG)
    """not extinct:"""
    obj_childView1_1 = QtGui.QTreeWidgetItem()
    obj_parent1.addChild(obj_childView1_1)
    """bird"""
    obj_childView1_1_1 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_1)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_1)
    """mamal"""
    obj_childView1_1_2 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_2)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_2) 
    """reptile"""
    obj_childView1_1_3 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_3)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_3) 
    """connect event"""
    QtCore.QObject.connect(self.obj_animalTreeWDG, QtCore.SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.obj_treeViewInput)

Voici le code pour ajouter les feuilles dans l'arbre:

def insert_treeLeaves(self,total,tree_directParent):
    for i in range(0,total):
        """leaves with color name"""
        tree_child_leaf = QtGui.QTreeWidgetItem()
        tree_directParent.addChild(tree_child_leaf)

Ensuite, nous avons la fonction qui nous dit chaque fois que l'on clique sur l'arbre et où il a été cliqué:

def obj_treeViewInput(self,item,col):
    print "obj _Qtree : pressed"
    print "name:" item.text(col)

Le problème est de savoir comment obtenir si la feuille touchée (en rouge) appartient à l’Oiseau ou à un autre père, c’est-à-dire comment obtenir le résultat suivant en effectuant un clic de souris: Animal - Non éteint - Mammifère - (rouge).

Tous les commentaires et suggestions sont très appréciés.

Était-ce utile?

La solution

Qu'en est-il d'une méthode dans chaque QtreeWidgetItem dans laquelle vous pouvez imprimer le chemin d'accès à cet élément.

Dans cette méthode, vous pouvez utiliser la récursivité pour obtenir le chemin complet des parents de l'élément (vous disposez d'une méthode "QTreeWidgetItem * parent () const" pour le faire) et vous ajoutez le texte de l'élément actuel au chemin de son parent! Vous arrêtez la récursivité lorsqu'un élément n'a pas de parent.

J'espère avoir compris votre question et que cela vous aide un peu!

Avez-vous votre propre classe QTreeWidgetItem? Vous pouvez utiliser un rôle spécifique pour y parvenir ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top