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

Le paterne MVC avec Qt4


Sujet :

Qt

  1. #1
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut Le paterne MVC avec Qt4
    Salut,

    Je suis en train d'apprendre Qt4 et il y à une partie qui me semble important que je n'arrive pas à comprendre, c'est la gestion du paterne MVC par Qt4.

    D'âpres ce que j'ai pu lire sur Internet, Qt4 a une gestion intégré du paterne MVC.
    Le problème est que je n'arrive pas à comprendre comment Qt4 l'a implémenté.

    Pour moi le paterne MVC, c'est :
    - Un modèle : qui contient les données avec leur méthodes de traitement,
    - Une vue : qui s'occupe d'afficher des objets modèle,
    - Un contrôleur : qui fait le lien entre la vue et le modèle et leur dit quoi faire.

    Avec comme principal atout d'avoir trois parties bien distincte et donc une architecture très claires.


    Lorsque je regarde le MVC intégré de Qt4 qui est expliqué ici : graphicsview
    Je n'arrive pas à identifier ces différentes parties. (ou au minimum deux, le modèle et la vue, car ils semblent dire que le contrôleur est intégré à la vue)

    Il semble que leur architecture tourne autour de 3 classes :
    - QGraphicsItem : qui semble être leur modèle
    - QGraphicsView : qui semble être leur vue
    - QGraphicsScene : qui est aussi une autre vue ?

    Lorsque l'on regarde de plus près QGraphicsItem, on peu voir qu'elle possède une méthode "paint" qui est appelé par QGraphicsView et qui serre à s'afficher.
    Donc ca semble étre le modèle qui s'affiche et c'est la vue qui demande au modèle de s'afficher ?
    Le modèle ne devrais normalement pas avoir à s'occuper de tout ce qui est affichage non ?

    Bref, je comprend pas bien leur architecture et je ne retrouve pas les principes du paterne MVC qui est de séparer clairement chaque partie.


    Quelqu'un à t'il compris le fonctionnement du "Graphics View Framework" de Qt4 et serais t'il me l'expliquer ?
    Es normale que Item, qui joue le role de modèle, soit capable et même doit s'occuper de s'afficher ?

    Merci d'avoir pris le temps de lire ce poste et pour vos éventuelles réponses.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut,
    ou as tu vue que les graphicsview sont basé sur le MVC?? En quoi cela serai utile?

    Le mvc implémente dans Qt4 touche d'autre partie
    http://qt.developpez.com/doc/latest/...ogramming.html

    Enfin, c'est ce que j'ai compris, je me trompe peut être

  3. #3
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Merci pour ta réponse Mongaulois

    Citation Envoyé par Mongaulois Voir le message
    ou as tu vue que les graphicsview sont basé sur le MVC??
    Ha oui, effectivement, maintenant que tu le dit en fait c'est marqué nulle part :p
    C'est donc pour ca que je n'arrivais pas à retrouver les principes du paterne MVC ^^;

    Donc en faite toute la partie QGraphics* fait partie de la branche "Vue" ?

    Et c'est à nous de créer des classes et les faire hériter de :
    - QAbstractItemModel : Pour les Modèles,
    - QAbstractItemView : Pour les Vues,
    - QAbstractItemDelegate : Pour les Controleurs.

    C'est bien ça ?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  5. #5
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Citation Envoyé par Ekinoks Voir le message
    - QAbstractItemDelegate : Pour les Controleurs.

    C'est bien ça ?
    Pas exactement pour les contrôleurs. Qt remplace ce concept par les delegates.

    Dans le MVC classique, tu as un seul et unique contrôleur qui gère l'édition et l'affichage des données.

    Dans le modèle-vue Qt, le delegate permet un contrôle plus fin de l'édition et de l'affichage des données selon plusieurs paramètres.

    C'est un peu plus souple qu'un simple contrôleur. Tu t'en rendras compte à l'usage.
    Il y a aussi le concept de "Proxy Model" qui est intéressant à connaître.

    Amuses-toi bien

  6. #6
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Merci pour vos réponses.

    J'ai lu la doc de Qt "Model/View Programming", et j'ai également lu un certain nombres d'exemples.
    Je pense que j'ai bien compris comment ca marche.
    Par contre tout les exemples ou documentations que j'ai pu lire sur le sujet utilise des vues de type "tableau" (type classique comme QListView, QTableView ou QTreeView ; ou alors des type redéfini du même genre).

    Lorsque je regarde la classe de base à hériter pour créer une vue personnalisé (QAbstractItemView), je me dit que ce n'est peu être pas tres adapté pour une vue de type "dessin" non ?

    Ne faudrait il pas mieux que je créé mon propre paterne MVC sans passer par Qt4 ?

  7. #7
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Il ne faut pas que tu mélanges tout non plus. Le Graphics View Framework de Qt est une manière d'organiser un rendu graphique. Il n'a rien à voir avec MVC.

    La scène contient un ensemble d'items qui sont interactifs et des illustrations. On dessine sur la scène.
    Le widget permettant de représenter la scène est une vue.

    Par exemple, tu veux représenter un ensemble de produits sur un fond de présentoir.
    Tu dessines sur ta scène le présentoir.
    Tu créées une classe héritant de QGraphicsItem possédant des caractéristiques spécifiques. (formes, couleurs, nom du produit)
    Tu intègres des objets issus de cette classe dans ta scène afin de représenter les produits : tu les positionnes où tu veux.
    Tu associes ensuite ta scène à la vue que tu mets où tu veux dans ton application.
    Tu peux alors implémenter une fonction de type "mousePressEvent()" au niveau de ta vue. Dans celle-ci, tu détectes quel élément est sous le curseur de la souris et tu effectues une action particulière.
    Exemple (pourri, mais qui illustre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void MyView::mousePressEvent(QMouseEvent *event)
    {
        QGraphicsItem *item;
     
        foreach ( item, items(event->pos()) )
            qDebug() << item->data(0).toString() << " est sous le curseur." << endl;
    }
    Et du coup, c'est vraiment génial pour faire des petites animations interactives rapidement et avec des performances remarquables.

Discussions similaires

  1. Comprendre MVC avec les JSF
    Par nighma dans le forum JSF
    Réponses: 2
    Dernier message: 18/04/2007, 16h45
  2. programmer des graphes en C++ avec Qt4
    Par donalpho dans le forum Qt
    Réponses: 20
    Dernier message: 06/04/2007, 16h45
  3. [debutante]MVC avec JSF
    Par solawe dans le forum JSF
    Réponses: 13
    Dernier message: 15/11/2006, 01h43
  4. Réponses: 2
    Dernier message: 14/07/2006, 20h36

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