-
QProxyModel et QTreeView
Bonjour bonjour,
Alors voila, à l'origine, j'avais un QTableView qui permettait d'afficher des données avec un modèle perso.
Le tout était passé par un QSortFilterProxyModel pour pouvoir trier tout ce beau monde (pas besoin de la fonction filtre).
Maintenant je voudrais rajouter une fonctionalité à savoir que certaines lignes peuvent contenir des sous-lignes, avec les même colonnes.
J'ai donc pour cela mis en place une QTreeView me permet d'afficher une liste style QTableView mais avec les sous-lignes.
Dans un premier temps j'ai viré le proxy pour le tri, pour faire marcher tout bien déjà comme ça.
J'ai du pas mal modifié mon modèle pour gérer les relations parent et tout marche bien sans le tri.
Maintenant, je ne sais pas trop si le QSortFilterProxyModel est toujours adapté à mes besoins, car j'aimerais pouvoir filtrer uniquement les lignes haut niveau (comme avant), mais sans que cela affecte l'ordre des sous-lignes.
Quelqu'un sait si le QSortFilterProxyModel est paramétrable à ce point ou si il faut que je me refasse un ProxyModel à la main?
De plus, quand je met un QSortFilterProxyModel tel quel, mes sous lignes ne s'ouvrent pas forcément bien, le QSortFilterProxyModel peut gérer un modèle en arbre (et dans ce cas j'ai un problème dans mon modèle initial qui n'émerge que quand il y a le proxy par dessus), ou est-ce que c'est déjà pas conçu à la base pour gérer autre chose que des modèles type liste / table.
Et dans le cas ou un simple QSortFilterProxyModel n'irait pas, le plus simple est de faire un proxy qui hérite de QSortFilterProxyModel ou carrément de QAbstractProxyModel?
Merci d'avance :)
-
Bon j'ai finis par m'en sortir, si quelqu'un est face à ce problème genre de problème un jour:
Le QSortFilterProxyModel peut très bien gérer les arbres, mes soucis de sous lignes qui n’apparaissaient pas venait d'un soucis dans le modèle de base.
Et pour faire en sorte que seules les lignes de premier ordre soient triées, il suffit de redéfinir les méthodes mapToSource et mapFromSource, en appelant que celle de QSortFilterProxyModel dans le cas ou il n'y a pas de parent, sinon de faire un mapping direct via ligne/colonne.