L'interface principale¶
Utilisation de la boite à outil abuledu réutilisable pour le menu abuleduaproposv0 en suivant la doc.
Création de boutons (abuleduboutonv0 forcément) pour lancer les différentes activités. Au passage, apprentissage qu'il est possible de passer des slots en paramètres d'appels de fonctions personnalisées.
Pour factoriser un peu le code j'ai fais une fonction locale createBouton (vu qu'on a 8 boutons à créer, que ça demande 6 lignes à chaque fois ...).
void aNousLesNombres::createBouton(QGraphicsScene * dessin, QString nom,int x,int y,int w, int h, const char * myslot)
{
AbulEduBoutonV0 * bouton = new AbulEduBoutonV0(nom);
bouton->QGraphicsItem::setCursor(Qt::PointingHandCursor);
bouton->setPos(x,y);
bouton->resize(w,h);
dessin->addItem(bouton);
connect(bouton,SIGNAL(clicked()),this,myslot);
}
Tous les boutons sont connectés sur le même slot. J'aurais pu décider de les connecter sur des slots différents mais comme il est possible de savoir "qui envoie le signal" accroché à un slot j'ai préféré utiliser cette fonctionnalité, ça me donne donc une fonction de "captage" des slots qui ressemble à ça:
void aNousLesNombres::btnExerciceClicked()
{
qDebug() << sender()->objectName();
QString fromSignal = sender()->objectName();
if(fromSignal == "train")
{
qDebug() << " cliqué sur train";
}
else if (fromSignal == "calapa")
{
qDebug() << " cliqué sur calapa, je lance le 1er tableau de tests des lapins + animations";
exercice * c = new exercice(this);
c->show();
}
}
Note importante¶
Je n'ai pas encore compris comment marche le système de placement des objets dans un QGraphicsScene, toutes les positions en X sont multipliées par deux ... peut-être une histoire de zoom ou autre, si vous trouvez comment faire pour que (200,10) corresponde réellement à la position du pixel x=200 et y=10 je suis intéressé !!!
//Creation des zones sensibles, attention la position en X est (X reel)/2 ... en pixels
createBouton(dessin,"calapa", 70, 20,220,140,SLOT(btnExerciceClicked()));