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

Discussion :

Qt : MVC Model & Vue : Sudoku

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Qt : MVC Model & Vue : Sudoku
    Bonjour,

    J'ai pour petit projet de concevoir un sudoku via Qt. Ceci est une excuse pour "réviser" un peu mes connaissances sur Qt et aussi un peu du C++ ^^'
    J'ai donc choisi d'utiliser le model MVC pour structurer la grille et l'affichage de la grille (le tout viendra s'adapter dans une interface plus complexe).
    J'ai donc dans l'idée de créer un nouvelle objet de vue et un nouveau model.
    Seulement, j'ai encore quelques question et j'aurais aimer avoir l'avis d'autres développeur sur la façon dont je compte structurer tout ca.

    Voila ma vision des choses :

    Une classe SudokuData qui encapsule une sorte de std::vecteur<bool> de dimension w*h*9(car il faut gérer la possibilité de stoker plusieurs choix pour une case de sudoku, jusqu'à 9). Cela signifi que pour la case i,j on peut savoir si le chifre n(0 < n < 10) est oui ou non un choix de l'utilisateur. Une case vide a donc Sigma(n_i) = 0, et une case a un choix Sigma(n_i)=1. En réalité je compte l'implémenter sous forme d'un std::vecteur<short int> de w*h et utiliser des masques binaire (un short int étant sur 16 bits, j'ai bien la place de stoker mes 9 bits de bool et même un 10ème bit pour savoir si c'est un champ compléter par l'utilisateur ou bien de la grille d'origine ^^)

    Une classe SudokuModel qui permet d'accéder à un index via i,j et a pour fils une liste des nombres de la cellule (liste vide = cellule vide, liste a un element = 1 seul choix)

    Une classe SudokuVue qui affichera un mag'nifik' tableau de 9*9 joliment découpé, extensible, etc etc, et qui bien sur affichera dans un case jusqu'à 9 chiffre en petit, ou un seul en gros [détail extrêmement utile pour ce message, je le conçoit]

    Ensuite, vien la question de la vérification de validitée, et de la résolution de la grille. Pour des raisons de rapiditées, ces manipulations ne peuvent se faire que dans la classe SudokuData. La question est, comment devront-elle être appeler par la vue?

    Première solution : Directement sur la classe SudokuData (bof bof)
    Seconde solution : Sur la classe SudokuVue qui feras un appelle à SudokuData.(Mieu) [Avec/Sans conenction Signal/Slot]
    Troisième solution : On connecte un composant de vue avec son signal sur un slot de SudokuVue qui lui même appelle une fonction de SudokuModel et s'occupe des appelles à SudokuData. (Solution que je préfère)

    Pour l'appelle de SudokuModel->SolveGrid() par SudokuVue, vous voyez ça comment, simplement un "SudokuModel->SolveGrid()" dans le code de SudokuVue ou via signal/slot?

    Voila, au plaisir, Eagle.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Citation Envoyé par SulphurEagle Voir le message
    Ensuite, vien la question de la vérification de validitée, et de la résolution de la grille. Pour des raisons de rapiditées, ces manipulations ne peuvent se faire que dans la classe SudokuData. La question est, comment devront-elle être appeler par la vue?

    Première solution : Directement sur la classe SudokuData (bof bof)
    Seconde solution : Sur la classe SudokuVue qui feras un appelle à SudokuData.(Mieu) [Avec/Sans conenction Signal/Slot]
    Troisième solution : On connecte un composant de vue avec son signal sur un slot de SudokuVue qui lui même appelle une fonction de SudokuModel et s'occupe des appelles à SudokuData. (Solution que je préfère)
    4ème solution: partager l'instance de SudokuData entre le modèle et la classe qui instancie le modèle et fournie le nouveau modèle à la vue ?

    Citation Envoyé par SulphurEagle Voir le message
    Pour l'appelle de SudokuModel->SolveGrid() par SudokuVue, vous voyez ça comment, simplement un "SudokuModel->SolveGrid()" dans le code de SudokuVue ou via signal/slot?
    Je verrais ça autrement; un slot de SudokuData qui n'est pas connecté à la vue, mais à la même classe qui coordonne données, modèle et vue plutôt.

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Salut,
    4ème solution: partager l'instance de SudokuData entre le modèle et la classe qui instancit le modèle et fournie le nouveau modèle à la vue ?
    Donc, disons que la vue et le model son utiliser dans une jolie classe SudokuWindow : QWidget. Donc j'instencie le model, je lui li un SudokuData, et je créer des slot sur SudokuWindow pour effectuer les manips sur le SudoKuData?
    Ou bien je récupère depuis le model un SudokuData instancié par ce dernier?

    Citation Envoyé par IrmatDen Voir le message
    Salut,
    Je verrais ça autrement; un slot de SudokuData qui n'est pas connecté à la vue, mais à la même classe qui coordonne données, modèle et vue plutôt.
    Donc, des slots sur SudokuData et je connecte des signal de SudokuWindow dessus? (et les signales des boutons sur des slots de SudokuWindow qui émettent des signales de SudokuWindow)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par SulphurEagle Voir le message
    Donc, disons que la vue et le model son utiliser dans une jolie classe SudokuWindow : QWidget. Donc j'instencie le model, je lui li un SudokuData, et je créer des slot sur SudokuWindow pour effectuer les manips sur le SudoKuData?
    Ou bien je récupère depuis le model un SudokuData instancié par ce dernier?
    J'imaginais garder les données dans, ici, SudokuWindow; ça permet de te faciliter la vie lorsque tu as à toucher directement au donnée de ne pas avoir à passer par une méthode intermédiaire.

    Citation Envoyé par SulphurEagle Voir le message
    Donc, des slots sur SudokuData et je connecte des signal de SudokuWindow dessus? (et les signales des boutons sur des slots de SudokuWindow qui émettent des signales de SudokuWindow)
    Pas forcément des signaux de SudokuWindow, mais des signaux de widgets éventuellement (par exemple le clicked() d'un bouton, ou le triggered() d'une action). Selon le moment où tu veux le déclencher, tu peux avoir à déclarer tes slots, mais ce n'est pas une obligation

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

Discussions similaires

  1. MVC (model view controler)
    Par java2dev dans le forum Général Java
    Réponses: 2
    Dernier message: 08/03/2011, 10h55
  2. MVC : identifier les vues ?
    Par ekryyn dans le forum ALM
    Réponses: 0
    Dernier message: 10/04/2010, 19h39
  3. [MVC] Model Binding : cherche renseignements
    Par zax-tfh dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/12/2009, 02h11
  4. [Spring MVC] Controleur sans vue?
    Par Ylias dans le forum Spring Web
    Réponses: 4
    Dernier message: 07/05/2008, 11h54
  5. [MVC] Communication Modèle, Vue
    Par dahtah dans le forum MVC
    Réponses: 4
    Dernier message: 25/10/2007, 17h25

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