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

Représentation d'une classe


Sujet :

Qt Creator

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Points : 97
    Points
    97
    Par défaut Représentation d'une classe
    Bonjour tout le monde,

    J'essaye actuellement de représenter une classe relativement complexe dans une fenêtre QT avec différents widgets.
    J'ai cru comprendre que, pour faire les choses proprement, il fallait passer par un modèle MVC. Et c'est là que je bloque..
    Dans les tutoriels que l'on trouve sur internet, il est souvent expliqué comment on fait interagir des modèles et des vues (en utilisant éventuellement des delegates personnalisés si l'on cherche à aller vers l'exotisme).
    Mon problème est que je n'arrive pas à faire le lien entre ma classe et mon modèle...

    Supposons par exemple que j'ai programmé les classes Vehicule et Garage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Vehicule
    {
     
    public:
     //fonctions membres : Accesseurs+constructeurs+ editeurs...
     
     
    protected: //données memebres
        int mPrix, mAnnee;
        QString mPlaqueImmatriculation, mIdentifiant;
     
    };



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Garage
    {
    public:
     
     //fonctions membres : Accesseurs+constructeurs+ editeurs...
     
    private:
        int mNbVehicule;
        QVector<Vehicule> mListeVehicules;
     
    };

    Comme vous l'avez deviné, l'idée est d'afficher le garage dans un Widget (ici sous forme d'une liste) et de pouvoir éditer, par exemple, les données membres de ses éléments. L'idée est d'aussi de ne pas afficher toutes les données et en cacher certaines (comme la plaque d’immatriculation) et interdire l'édition d'autres données...

    Mes questions sont donc les suivantes :

    1. Est ce que dans ce cas précis, passer par un modèle MVC est la chose qu'il faut faire?
    2. Comment relier la classe Garage à un modèle pour pouvoir l'éditer à travers une interface graphique? Est ce que garage n'est pas déjà un modèle en soi?!!
    3. L’accès aux champs privés et publiques de mes différentes classes se fait t-il avec des accesseurs et editeurs membres ou alors la magie du mvc (je suis sceptique) me permet d'éditer directement ces champs



    Je bloque/bogue vraiment depuis quelques semaines sur cette notion de MVC et je n'arrive pas vraiment à avancer. Je vous remercie, par avance, pour votre aide.

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Est ce que dans ce cas précis, passer par un modèle MVC est la chose qu'il faut faire?
    Oui, c'est une bonne idée. Il me semble que Qt rend la chose assez facile avec le système de signals et de slots qui plus est.

    Comment relier la classe Garage à un modèle pour pouvoir l'éditer à travers une interface graphique? Est ce que garage n'est pas déjà un modèle en soi?!!
    La classe Garage appartient au modèle ou peut constituer le modèle, pourquoi pas, à condition d'être auto-suffisante: le modèle, c'est l'endroit où on travaille, le domaine "métier". Si la classe garage correspond à l'intégralité du domaine métier (elle s'occupe de compter les voitures, les faire entrer, sortir, les laver, etc.) alors elle constitue le modèle.

    L’accès aux champs privés et publiques de mes différentes classes se fait t-il avec des accesseurs et editeurs membres ou alors la magie du mvc (je suis sceptique) me permet d'éditer directement ces champs
    Il n'y a pas de magie dans le modèle MVC. L'idée c'est que le modèle, comme il est auto-suffisant, n'est pas accédé directement depuis l'interface graphique. Il y a une couche entre le modèle et l'interface, c'est le contrôleur.

    1. je clique sur l'interface pour laver ma voiture -> un événement "clic sur voiture 123456789" est pris en charge par le contrôleur -> le contrôleur envoie au modèle un événement "voiture 123456789 à laver"
    2. le modèle lave la voiture et envoie l'événement "voiture lavée" -> le contrôleur transmet à l'interface graphique la mise à jour -> l'interface graphique l'affiche

    Le job du contrôleur c'est de synchroniser les deux autres couches sans qu'elles communiquent directement entre elles. Comme je te le disais, Qt offre une sorte de contrôleur prêt à l'emploi, qui est construit par les signals et les slots (enfin dans mon souvenir, tu peux regarder dans la doc pour voir où ça en est). Sans avoir recours à Qt, on peut implémenter le modèle MVC assez facilement. Tu peux regarder le pattern "observateur": https://fr.wikipedia.org/wiki/Observ..._conception%29

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Points : 97
    Points
    97
    Par défaut
    Merci pour ta réponse

    Du coup, permets moi de reformuler autrement : un espace de travail, par exemple (avec les variables and co) peut être un modèle?

    Du coup je dois faire dériver ma classe garage d'un qAbstractModel? Comme ça je ne peux pas l'utiliser directement?


    je clique sur l'interface pour laver ma voiture -> un événement "clic sur voiture 123456789" est pris en charge par le contrôleur -> le contrôleur envoie au modèle un événement "voiture 123456789 à laver"
    Du coup, ca va te paraitre étrange mais cette phrase fait que je ne comprends plus l'utilité du MVC (rien que ça!). Du moment où je clique, je peux créer un event...MVC ou pas non? Alors qu'est ce que le modèle MVC apporte ici de plus?

    Je pourrais par exemple faire un boucle pour qu'elle affiche dans un tableau la représentation de garage et programmer de telle sorte à ce que :
    1. A chaque changement de variable un signal est envoyé
    2. A chaque clique dans le tableau un signal est envoyé


    Et générer la connexion signal slot par la suite pour mettre à jour mes variables, voir les différentes représentations si il y a plusieurs "vues"...eet ce sans passer par un modèle... Alors dans ce cas qu'est ce qu'apporte l'architecture MVC?

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Tu sais sinon qu'il y a un très bon tutoriel sur le site: http://qt.developpez.com/doc/4.7/mod...w-programming/

    Le contrôleur n'est pas indispensable, en effet, et le modèle peut être simplifié en modèle / value.

    Cela étant l'intérêt du MVC c'est de découpler parfaitement l'interface et la couche métier; de cette façon elles sont réutilisables séparément

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Points : 97
    Points
    97
    Par défaut
    Merci! Je l'avais vu et je le connais même pratiquement par cœur.. Mais je ne comprends pas[...]. Ca fait longtemps que je n'ai pas été aussi imperméable à une notion...

Discussions similaires

  1. Diagramme de classe, représentation d'une interface
    Par Leniouns dans le forum BOUML
    Réponses: 2
    Dernier message: 05/01/2012, 08h36
  2. Réponses: 0
    Dernier message: 04/01/2012, 15h49
  3. Réponses: 2
    Dernier message: 31/03/2010, 15h08
  4. Réponses: 18
    Dernier message: 26/11/2007, 15h43
  5. Réponses: 3
    Dernier message: 19/07/2007, 22h10

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