# Signaux et Slots

Le but de ce TP est de manipuler les signaux et slots de QT, depuis C++.

## Créez un nouveau projet TP2

* Choisissez un projet Qt. On aura pas besoin du graphique.

## Synchronisable

On va continuer une classe fournissants des objets qui se synchronisent.

* Créez une classe `Synchronisable` héritant de QObject (Ctrl + N).

* Donnez lui une *propriété* unique `cpt` de type entier, initialisé à 0.
* Utilisez le *refactor* (click droit sur la `Q_PROPERTY`) pour lui faire générer les membres manquants.
* **Lisez tout le code généré**. Si vous ne le comprenez pas, appelez moi!
* Modifiez le signal `cptChanged` pour qu'il prenne en plus un paramêtre un entier, nouvelle valeur du compteur.
* Utilisez `qDebug() << "message" << "\n";` pour afficher un message en console à chaque modification de `cpt` (pas encore besoin de connecter), en indiquant la nouvelle valeur, ainsi que l'adresse de l'objet. Si le vous ne voyez pas le message s'afficher, vous vérifierez que votre IDE est bien configuré pour vous afficher un terminaml (onglet vertical *Projet*, sélectionnez *Run* et cherchez la case à cocher).
* Créez deux `Synchronisables`, `a` et `b`. Renommez l'application si besoin est.
* Changez la valeur de `a`. Vérifiez l'affichage.
* Connectez `a` à `b` de façon à ce que le tout changement de valeur de `a` fasse changer la valeur de `b`.

### Utilisation d'un timer

Vous l'avez compris, en programmation événementielle, on perd la main sur le flot d'exécution. On va donc jouer avec un `QTimer` pour générer des *signaux* périodiquement.

* Ajoutez un *slot* `inc()` à `Synchronisable`. Ce slot incrémente de 1 la valeur du compteur.
* Créez un  `QTimer`
* Connectez le signal émis par le timer au slot `inc` de `a`.
* Démarrez le timer pour émettre un signal toutes les deux secondes.
* Vérifiez l'affichage. `b` s'incrémente-t-il aussi?
