# Communication C++ / QML" L'objectif de ce TP est d'apprendre à faire interagir C++ et QML. Vous utiliserez QtCreator. 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.