6
votes

Comment utiliser QsortfilterProxymodel pour filtrer un modèle d'arbre qui affiche uniquement les nœuds des enfants avec leurs parents?

J'ai un modèle d'arbre de travail dérivé de QabstractTemmodel et je souhaite la filtrer à l'aide d'une sous-classe QsortfilterProxymodel pour afficher uniquement des nœuds d'enfants de certains critères. Par exemple, j'ai l'arborescence suivante:

A
- B
-- C1
-- C1
-- C1
--- C2


1 commentaires

Wow! Vraiment personne ne pouvant répondre à cela?


3 Réponses :


2
votes

Je ne pense pas que cela soit possible à faire avec QsortfilterProxymodel. La raison en est que cette classe ne filtre que des éléments - les ménes qu'elle cache (ou non) certains éléments, fondant des critères donnés. Ce que vous voulez faire, c'est la restructuration de l'arbre en neuf (avoir des éléments choisis de la position arbitrale chez root-enfants). Cela n'est possible qu'en créant votre propre descendant QProxymodel et en mettant en œuvre vous-même de la reconstruction de l'arborescence et de mapper des index entre l'ancien et le nouvel arbre.

décrivant exactement comment faire cela est un peu long pour une réponse ici.


1 commentaires

Après avoir violé avec QsortfilterProxymodel, je pense que vous avez raison. Cela semble trop trachant pour créer mon propre QProxymode pour ne pas afficher les nœuds parents non pertinents. Je pense que je vais vivre avec les nœuds parents présents pour l'instant et appelez TreeView :: EXPARTALL () Chaque fois que je recharge mon modèle afin que toutes les données soient affichées immédiatement.



5
votes

D'accord, j'ai trouvé une solution à mon problème. Il suffit d'utiliser qtreeeeview :: setrootindex () avec index B comme argument d'entrée. L'indice B devient l'indice racine du Qtreeeeview, qui est caché et seuls ses enfants sont présentés en totalité.

Je me sentais vraiment idiot après avoir trouvé cette solution. Je suppose que j'étais trop concentré sur l'utilisation du modèle de proxy pour modifier la manière dont les données sont présentées, j'avais totalement oublié à propos de QtreeeView.


0 commentaires

0
votes

Bien sûr, SetroOtIndex est la solution dans ce cas, mais si vous recherchez des manipulations de modèle plus compliquées, vous pouvez envisager d'utiliser des modèles de proxy personnalisés tels que http://lynxline.com/category/models/


0 commentaires