diff --git a/Cours/2_signaux_interactions/qt_signaux.pdf b/Cours/2_signaux_interactions/qt_signaux.pdf new file mode 100644 index 0000000..ce5d563 Binary files /dev/null and b/Cours/2_signaux_interactions/qt_signaux.pdf differ diff --git a/TP/4-Interactions-Qml/README.md b/TP/4-Interactions-Qml/README.md new file mode 100644 index 0000000..73ea45b --- /dev/null +++ b/TP/4-Interactions-Qml/README.md @@ -0,0 +1,88 @@ +# Communication C++ / QML" + +L'objectif de ce TP est d'apprendre à faire interagir C++ et QML. +Vous utiliserez QtCreator mais **l'éditeur de GUI**. Vous pouvez utilisez si vous le souhaitez les `QtQuick.Controls.`. + +## Une classe NetworkInterface + +Écrivez une classe C++ `NetworkInterface` (Abrégé par la suite en *NI*). Cette +classe représente une interface réseau de votre machine et va interagir avec QML (notamment être affichée). + +Elle s'appuiera (sans en hériter, c'est une façade) sur la classe `QNetworkInterface` de Qt. Cette +dernière est un peu compliquée pour notre besoin et n'a rien de prévu pour être +accédée depuis QML. Nous complèterons son contenu au cours du TP. + +### Premier jet + +La classe *NI* a un attribut, de type `QNetworkInterface`, passé en paramètre à +la construction. Pour tester, je vous invite à regarder la méthode +`QNetworkInterface::interfaceFromName` et vous rappelle que vous avez toujours +au moins une interface réseau (`lo`), et sans doute un `eth0` ou un `wlan0` (les noms peuvent varier). + +Ajoutez une méthode publique `name` permettant d'avoir le nom de l'interface. + +### Un peu de QML + +Créez un *NI* dans votre `main`. Rendez cette instance visible dans QML. + +Affichez le nom de votre interface dans la page QML. + +### Compléter *NI* + +Ajoutez des méthodes `physicalAddress` et `address` à votre classe *NI*. Ces +méthodes renvoient des `QString`. + +Affichez les résultats dans QML. + +### Appel d'une méthode CPP depuis QML + +Ajoutez une méthode `shutdown` à *NI*. Cette méthode ne fait qu'afficher en +texte un message (vous n'avez pas les droits sur les machines pour +tomber les interfaces réseau). + +Ajoutez au QML un bouton ou un rectangle clickable qui appelle le `shutdown` de votre +*NI*. + +### Un attribut propre + +Ajoutez une propriété `myName` à l'interface. Cette propriété s'appuie sur un +attribut de type `QString` nommé `m_myName`. + +`myName` est initialisé à la construction avec le nom de l'interface (il pourra +par la suite être différent). + +Affichez *myName* à la place de *name* dans le QML + +### Dépendance + +Modifiez la méthode `shutdown` pour qu'elle change le nom perso de l'interface. +Si nécessaire, ajoutez ce qu'il faut pour que l'affichage soit actualisé. + +### Saisie + +Ajoutez un composant QML dans votre page pour permettre d'éditer le nom long +(*myName*) de l'interface réseau. Le nom est changé quand vous validez votre +saisie + +### Saisie en continu + +Modifiez le composant QML précédent pour que le nom de l'interface soit changé à +chaque modification du champs de saisie. + +### Utile pour la suite des TP + +* Ajoutez l'affichage de certaines propriétés QML dans la console Javascript dés +que votre fenêtre est affichée. + + +## L'essentiel est bouclé, place au facultatif + +Ajoutez les éléments suivants à votre interface: + +* Une image de fond +* Un champ de saisie pour taper le nom (court) d'une nouvelle interface (remplace la +précédente, on a pas vu les List/Model encore). +* La même chose avec une liste déroulante +* Une gestion correcte du redimentionnment +* Un ensemble de checkbox qui permette de masquer ou d'afficher les champs de +l'interface.