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 Quick Discussion :

Modèle de TableView en C++ affiché en QML?


Sujet :

Qt Quick

  1. #1
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut Modèle de TableView en C++ affiché en QML?
    Bonjour,

    Je souhaiterais afficher un modèle "complexe" dans une TableView décrite en QML.

    Quand je lis la doc Model/View programming, je comprends que j'ai besoin d'hériter de QAbstractTableModel et de redéfinir quelques méthodes (data(), rowCount(), columnCount() en particulier).
    Ensuite, selon le row et la column du QModelIndex passé en paramètre de data(), je peux retourner le QVariant qui correspond à la case (row, column). Le role, quant-à lui, sera toujours Qt::DisplayRole (je n'ai pas de rôles particuliers à gérer).

    Mais si je suis la documentation de QtQuick, les colonnes sont identifiés par le role à la place du numéro de column, ce qui semble absurde d'après les explications de la documentation précédente. Du coup, faut-il ignorer le champ column dans la définition du QAbstractTableModel, et utiliser les roles (qui semblent pourtant faits pour un autre usage)?

    Quelle est la bonne approche pour plugger un QAbstractTableModel C++ sur une TableView QML?

    Merci de votre réponse

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Les modèles en QML ne connaissent pas (à ma connaissance) la notion de table, mais uniquement de liste. Par contre, ils connaissent la notion de rôle.
    Pour utiliser ton modèle en QML, il faut donc donner un user role à chaque "colonne" pour le rendre accessible. Quelque chose comme cela :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class MyModel : pbulic QAbstractListModel {
    public:
        enum UserRoles {
            MyFirstColunm = Qt::UserRole,
            MySecondColumn,
            MyThirdColumn
        }
     
        QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE {
            return QHash<int, QByteArray>({ {MyFirstColunm, "MyFirstColunm"}, {MySecondColumn, "MySecondColumn"}, {MyThirdColumn, "MyThirdColumn"} });
        }
        ...
    };

    Et tu accèdes aux colonnes en QML en utilisant la chaîne (par exemple "model.MySecondColumn")

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Merci beaucoup de ta réponse. Je vais essayer tout ça.

    Apparemment, effectivement, même le composant QML TableView ne gère pas des tables mais des listes, et utilise des rôles.

    Du coup, quel est l'intérêt de column dans QAbstractTableModel?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Ce n'est pas pour le QML, mais pour le C++

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    Ce n'est pas pour le QML, mais pour le C++
    Du coup, QAbstractTableModel c'est censé être utilisé en QML ou juste en C++?
    Car si c'est utilisable dans les deux cas, il faut quand même adapter son implémentation selon d'où on l'utilise (dans le premier cas il faut utiliser les rôles, dans le second les colonnes)…

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Tu peux faire un modele pour chaque utilisation, ou tu peux utiliser le meme modele avec les 2 types d'acces. C'est plus simple d'avoir un modele

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Pour aller dans le sens de ta réponse, une citation d'une autre page de doc :
    QAbstractItemModel presents a hierarchy of tables, but the views currently provided by QML can only display list data.

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

Discussions similaires

  1. [SP-2010] Modèle BCS qui ne s'affiche pas après déploiement
    Par ciresamba dans le forum SharePoint
    Réponses: 3
    Dernier message: 17/02/2014, 09h28
  2. [Débuter] Afficher un QML lors d'un clic
    Par Ploupi dans le forum Qt Quick
    Réponses: 10
    Dernier message: 05/09/2012, 21h48
  3. [XNA] Afficher un modèle et sa (ou ses) texture(s)
    Par Myth_Titans dans le forum XNA/Monogame
    Réponses: 0
    Dernier message: 30/12/2007, 13h42
  4. [SWT] TableViewer Afficher un Composite dans une cellule
    Par ShakaZulu dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2006, 18h45
  5. [JTable] Probleme pour afficher la mise à jour du modèle
    Par Yannick_from_31 dans le forum Composants
    Réponses: 2
    Dernier message: 02/06/2006, 19h10

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