- QT
- AbulEduApplicationV1
- AbulEduAproposV1
- AbulEduAudioV1
- AbulEduButtonListV1
- AbulEduCameraV1
- AbulEduCameraWidgetV1
- AbulEduConstantesV1
- AbulEduEditeur
- AbulEduGraphicsEtiquetteV1
- AbulEduIdentitesV1
- AbulEduInstructionV1
- AbulEduMediaplayerV1
- AbulEduMediathequeGetV1
- AbulEduMenuFeuilleV1
- AbulEduNumericLinearPadv1
- AbulEduQRCodeReaderV1
- AbulEduSingletonV1
- AbulEduSlideWidgetContainerV1
- AbulEduStackedWidgetV1
- AbulEduTexteV1
- AbulEduTextV1
- AbulEduTutorialV1
- AbulEduVirtualKeyboardV1
- AbulEduVisionneuseImageV1
- AbulEduWidgetAssistantEtapesV1
- Affichage des messages d'erreurs
- Affichage dynamique des étapes d'un éditeur
- Bouton croix de fenêtre
- Centrer une fenêtre
- Création fichierdossier temporaire unique
- Créer une AbulÉduApplicationV1 dans QtCreator
- Framework Graphic View
- Framework Graphic Viewodt
- Framework State Machine
- Générer automatiquement un dictionnaire de verbes
- Gérer la modalité des fenêtres
- Gestion des arguments
- Getters par référence et non par valeur
- Installation Qt5
- Installation Qt56
- Normalisation des modules
- Partager des variables avec différents pri
- Redimensionnement application Qt
- Redimensionner un QGraphicsSvgItem
- Tests et Logs sous Windows
- Utilisation de l'assistant AbulEduApplicationV1
- Utiliser des QSharedPointer
Utilisation de AbulEduExerciceV0¶
Pour les développeurs, la documentation technique et le code source: https://redmine.ryxeo.com/embedded/leterrier-developpeu/main.html
Principe¶
Pour structurer nos applications nous avons créé une classe "AbulEduExerciceV0" dont les objectifs principaux sont- charger automatiquement le plugin de remontée des logs et paramètres
- chercher si une mise à jour du logiciel existe
- ... (à ajouter au fur et à mesure des besoins)
De ce fait nous devons télécharger les fichiers abuleduexercicev0.h et .cpp, et les ajouter à notre projet en cours. Adresse de téléchargement de l'archive contenant ces fichiers: https://redmine.ryxeo.com/projects/leterrier-developpeu/files, préférez le dépôt de code source qui doit être plus à jour que les archives de téléchargement.
Transformer une QMainWindow en AbulEduExerciceV0¶
Pensez à ajouter au projet les fichiers abuleduexercicev0.h et abuleduexercicev0.cpp (de préférence en les copiant dans un sous dossier lib/ de votre application)
Ensuite, le plus simple est de créer une application de type QMainWindow dans QT et ensuite de modifier les fichiers suivants:
- mainwindow.h, dans l'entête du fichier ajouter la ligne
#include "lib/abuleduexercicev0.h"
- mainwindow.h ensuite, remplacer la ligne
class MainWindow : public QMainWindow
- par
class MainWindow : public AbulEduExerciceV0
- mainwindow.cpp ensuite, remplacer les lignes
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindowClass)
- par (la seule modification est en fait AbulEduExerciceV0)
MainWindow::MainWindow(QWidget *parent)
: AbulEduExerciceV0(parent), ui(new Ui::MainWindowClass)
- pensez à ajouter le XML dans le fichier .pro de votre projet (abuleduexercicev0 utilise XML)
QT += xml
Utiliser les méthodes spéciales de AbulEduExerciceV0¶
Générales (dans la partie principale de l'application)¶
- Affecter un nom à votre application (par exemple dans le main.cpp) avant la fonction main, il faut la définition du nom de l'application "humainement compréhensible":
extern const QString abeApplicationLongName=QObject::trUtf8("AbulÉdu LeTerrier -- Raconte-moi");
- puis dans la fonction main du fichier main.cpp
qApp->setApplicationName("leterrier-racont"); //Le code de l'application telle que définie par redmine
qApp->setOrganizationDomain("abuledu.org"); //Le domaine (normalement abuledu.org)
qApp->setOrganizationName("leterrier"); //Le nom de l'organisation, on converge tous vers leterrier :)
- Affecter un numéro de version dans votre application (par exemple dans le main.cpp)
qApp->setApplicationVersion("1.0.1"); //Version du logiciel
Au début d'un exercice¶
- Indiquer le nom de l'exercice en cours (étiquette libre décidée par le développeur) (facultatif)
setAbeExerciceName("addition");
- Indiquer le niveau de l'exercice en cours (étiquette libre décidée par le développeur) (facultatif)
setAbeLevel("niveau 1");
- Indiquer le nombre de questions posées dans ce niveau (facultatif)
setAbeNbTotalQuestions(10);
- Indiquer la compétence "code interne leterrier" que cet exercice permet de valider (facultatif)
setAbeSkill("table multiplication 2");
À chaque réponse d'une question posée¶
- Ajouter une "ligne de log" dans notre structure locale (les deux premiers paramètres sont obligatoires mais pas les suivants):
setAbeLineLog("Quel est l'âge du capitaine ?","99");
//avec tous les parametres possibles
setAbeLineLog(QString question, QString answer,
int score=-1, int nbPrintedQuestions=0, QString evaluation="",
QString expected="", QString answerTime="", QString answerIntermediate="",
QString answerProposed="");
Description des différents paramètres:
- question: la question qui a été posée (exemple "2+2")
- answer: la réponse qui a été donnée par l'utilisateur (exemple "4")
- score: le score (si il existe) (exemple 1)
- nbPrintedQuestions: nombre de question déjà posées (permet de suivre une séquence de questions)
- evaluation: code évaluation de la réponse, a,b,c,d ou z (exemple "a")
- a: c'est bien
- b: un peu moins bien
- c: pas très bien
- d: faux
- z: pas de réponse
- expected: la réponse attendue (exemple "4")
- answerTime: durée de la réponse
- answerIntermediate: s'il y a eu des réponses intermédiaires (exercices avec construction de la réponse)
- answerProposed: s'il y avait des réponses proposées (exemple d'un texte à trou où on demande de choisir une réponse dans une série de propositions)
À la fin d'un exercice¶
- Envoyer le log sur le serveur via le plugin, si le plugin n'est pas là, ça ne fait rien (au sens de "ça n'est pas grave")
pushAbulEduLogs();
Vérification (serveur etc.)¶
Pour vérifier le bon fonctionnement du système vous pouvez vous connecter sur le serveur de tests https://secure.ryxeo.com/leterrier/view.php.