You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.1 KiB
89 lines
3.1 KiB
# 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.
|