parent
2a09adcfbf
commit
5b0f5f5d9e
Binary file not shown.
@ -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.
|
Loading…
Reference in new issue