Projet

Général

Profil

Tableaux

Développement initial en TCL/TK

Nouveau développement en QT/C++ (2011)

Nouveau nouveau développement QT 5.2

Fondé sur l'assistant leterrier-with-statemachine, ce développement va essayer (once more time) de rester au plus près des canons des logiciels du Terrier et des normes de dev Ryxéo.

Les tableaux à double entrée sont créés grâce à une "grande image" représentant le tableau entier rempli avec ses entêtes (voir fichier joint). Les cases du tableau ont une taille de 128 x 128 px (exactement). Les
cases et pièces à afficher sont choisies au hasard. Une classe dédiée au découpage de la grande image (iconesSet) a été créée AbulEduPieceCommonV1, elle retourne des QSharedPointer<QPixmap> pointant vers les icones voulues.
Tableau 3x4 rempli avec 5 pièces dont deux mal placées

Partis pris de développement.

  • Les paramètres des exercices sont sauvegardés dans des instances de la classe ExerciseDatas. Les différentes activités sont suffisamment proches pour qu'une seule classe suffise à les décrire.
  • La classe ci-dessus fait un appel immodéré aux Q_PROPERTY afin de permettre un truc très pratique, l'export automatique de ces propriétés dans le fichier de configuration voir exportToFile(QSettings) et importFromFile(QSettings)
  • Dans l'éditeur, afin de gérer assez simplement les ajouts et suppression d'exercices, la liste des exo est présentée dans un QListWidget, chaque item est lié par un setData(1, pointeur_vers_exerciceDatas), l'exerciceDatas lui-même est lié à l'item grâce à un setProperty("item", pointeur_vers_item)
  • Dans le fichier de configuration module.conf, les exercices sont sauvegardés les uns à la suite des autres sans faire de array. Bien que contrevenant aux "normes", j'assume cette décision liée à la ressemblance entre les différentes activités.

Classes "outils"

  • Afin d'avoir de jolis qdebug, j'ai surclassé l'opérateur operator<< pour les classes AbuEduPieceCommonV1 et ExerciseDatas
    DEBUG 2014-02-24T17:48:15.233 abuledueditor.cpp @ 225       
    ----- ExerciseDatas ---------------------
         Type     : ExercisePlacePiece
         Titre    : "Exercice N°1" 
         Image    : "" 
         Nombre de colonnes : 3
         Nombre de lignes   : 4
         Nombre de pièces   : 5
    ----------------------------------------- 
    
  • J'ai utilisé une classe Template afin de convertir les void* en QVariant et vice versa afin de pouvoir les utiliser dans setProperty et setData.
    /// @brief conversion de pointer void* en Qvariant et vice versa
    /// @code
    /// MyClass *p;
    /// QVariant v = VariantPtr<MyClass>::asQVariant(p);
    /// /* Retrouver le pointer */
    /// MyClass *p1 = VariantPtr<MyClass>::asPtr(v);
    /// @endcode
    template <class T> class VariantPtr
    {
    public:
        /* Retrouver le pointeur */
        static T* asPtr(QVariant v)
        {
            return  (T *) v.value<void *>();
        }
        /* Transformer le pointeur en QVariant */
        static QVariant asQVariant(T* ptr)
        {
            return qVariantFromValue((void *) ptr);
        }
    };
    

TableauFormesCouleurs.png (82,4 ko) Jean-Louis Frucot, 24/02/2014 17:23

Sélection_012.png - Tableau 3x4 rempli avec 5 pièces dont deux mal placées (109 ko) Jean-Louis Frucot, 24/02/2014 18:07

essai.abe - un module d'essai minimaliste (91,3 ko) Jean-Louis Frucot, 26/02/2014 19:09

Redmine Appliance - Powered by TurnKey Linux