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

PyQt Python Discussion :

Proxy model pour afficher un arbre (QtreeView) à partir d'une table (QAbstractTableModel)


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Par défaut Proxy model pour afficher un arbre (QtreeView) à partir d'une table (QAbstractTableModel)
    Bonjour,

    J'apprends actuellement PySide et le concept MVC (enfin MVD) et j'avais une question pour représenter des données, organisées en tables (liste de listes), en arbre. J'ai donc sous-classé sans souci grâce à des tutos un QAbstractTableModel afin de représenter et éditer mes données via une Tableview. Je souhaiterais également pouvoir représenter lesdites données sous forme d'arbre. Suites à des recherches, je suis tombé sur les proxy model mais je ne trouve pas de tutos clairs qui expliquent notamment comment surcharger les méthodes de QSortFilterProxyModel pour obtenir un arbre (si je ne me trompe pas, c'est la classe qu'il me faut). Je souhaite pouvoir regrouper les données par parent et les ordonner (les parents ne sont pas définis dans le QAbstractTableModel).
    Est-ce que je dois définir une seconde classe qui définit les nœuds de l'arbre avant de faire un proxy Model (mais dans ce cas comment les relier au QAbstractTableModel ?) ou puis-je tout faire dans la classe dérivée du proxy ? Si je dois dériver d'une classe de proxy, quelles méthodes je dois surcharger pour représenter un arbre à partir du QAbstractTableModel (notamment si j'ai bien compris maptoSource et mapfromSource) ?


    Merci d'avance pour vos réponses.

    Aurelakan.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'ai qu'un petit morceau de réponse. A mon avis, le proxy QSortFilterProxyModel est fait pour s'interposer entre le modèle et l'objet graphique. Je l'utilise avec un QTableView pour consulter des tables d'une base de données, mais le "vrai" modèle reste dans ce cas QSqlRelationalTableModel qui fait la relation avec les données. Ce proxy me sert à ajouter des fonctions de tri/filtrage/recherche qui n'existent pas dans le modèle normal (tri selon le dictionnaire français, recherche de mots similaires avec ratio de proximité, etc....).

    La logique pour cette interposition est la suivante:

    - on a un modèle "model" qui est branché sur les données
    - on crée un proxy
    - on définit ce modèle comme source du proxy avec quelque chose comme: proxy.setSourceModel(model)
    - et on "accroche" le proxy à l'objet graphique avec par exemple vtable.setModel(proxy)

    A mon avis, si pour un QTreeView le modèle "QAbstractTableModel" est déjà trop typé "table", il faut revenir à son ancêtre "QAbstractItemModel". Avec les 2 mots "QTreeView" et "QAbstractItemModel" dans google, on trouve quelques pages qui peuvent être source d'inspiration (ex: http://www.hardcoded.net/articles/us...tractitemmodel).

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Par défaut
    Merci beaucoup pour votre réponse rapide.

    Donc la solution serait de dériver de QAbstractItemModel et de n'avoir qu'un seul modèle pour gérer les 2 vues ? Je vois bien pour .parent (la QTableview doit l'ignorer je pense et seul le QTreeview s'en préoccupe), mais pour columnCount par exemple, dans le cas de la QTableview, la méthode retourne le nombre de colonnes à afficher alors que pour le QTreeview elle doit retourner 1 . Il y a un peut-être un moyen de gérer ça mais je n'ai pas encore trouvé...

    Merci de votre aide.

Discussions similaires

  1. [Turbo Pascal] Programme qui affiche le jour à partir d'une date
    Par rafikadel dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 27/03/2020, 19h33
  2. [AC-97] Requette pour afficher un record en fonction d'une table de liaisons.
    Par Jazz_ dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/08/2010, 13h23
  3. afficher un jtable a partir d'une selection jlist
    Par lilmo dans le forum Composants
    Réponses: 1
    Dernier message: 31/12/2006, 10h49
  4. Réponses: 2
    Dernier message: 15/11/2006, 19h57
  5. Réponses: 2
    Dernier message: 04/06/2006, 18h53

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