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