# Programmation Qt/TP : un éditeur de texte

Cette page est en travaux. Tant que cet avis n'aura pas disparu, veuillez en considérer le plan et le contenu encore incomplets, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable, où des informations peuvent être données sur l'avancement des travaux.
* Avant-propos
* Introduction
* Développer pour Windows 64 bits
* Un premier programme
* Signaux et slots
* Projet Qt
* Classes et objets Qt
* Extensions du langage C++
* Utilisation de Qt Creator
** Créer un projet
* Les widgets
* Le positionnement des widgets
* La fenêtre principale
* TP : un éditeur de texte
* Traduire son programme
* Sauvegarder des données avec XML
* Sauvegarder des données avec SQL
* TP : un navigateur web
* Utilisation de Qt Designer
* Utiliser la documentation Qt
* Distribuer son programme
* Ressources
Annexes
* Avant-propos
* Introduction
* Développer pour Windows 64 bits
* Un premier programme
* Signaux et slots
* Projet Qt
* Classes et objets Qt
* Extensions du langage C++
* Utilisation de Qt Creator
** Créer un projet
* Les widgets
* Le positionnement des widgets
* La fenêtre principale
* TP : un éditeur de texte
* Traduire son programme
* Sauvegarder des données avec XML
* Sauvegarder des données avec SQL
* TP : un navigateur web
* Utilisation de Qt Designer
* Utiliser la documentation Qt
* Distribuer son programme
* Ressources
Annexes
[ Modifier le sommaire ]
Dans ce TP, vous apprendrez à créer un éditeur de texte.

## Découvrir le sujet et organiser son projet

Faire l'organisation du projet est très important. En effet, si vous ne le faites pas, vous risqueriez d'écrire des lignes de code inutiles ainsi que de faire des doublons.
Avant d'attaquer ce TP, il est important de connaître le sujet en détail.

### Cahier des charges

Nous allons créer un cahier des charges pour connaître ce dont notre éditeur de texte disposera.
* Éditer un document
* Ouvrir / enregistrer un document
* À propos du logiciel et de Qt
* Rechercher
* Statistiques du document
** Nombre de caractères(sans espaces)
** Nombre de caractères (avec espaces)
** Nombre de lignes
Les deux premiers éléments peuvent vous paraître bêtes, mais il est important de bien connaître la fonction principale d'un programme.
Cela peut vous paraître rien du tout, mais c'est déjà quelque chose de savoir faire ça !

### Variables et attributs

Je vous propose de faire du QTextEdit un attribut de la classe MainWindow pour qu'il soit facilement accessible par les méthodes de notre programme. De même, le nom du fichier, un QString, sera un attribut car il servira à l'utilisateur pour qu'il enregistre plus simplement, sans entrer le nom du fichier. Pour cela, on stockera aussi le chemin absolu, lui aussi dans un QString. Ainsi, ou pourra retrouver le dossier en supprimant le nom du fichier au chemin absolu.

### Fonctions et méthodes

Voici une liste utile de fonctions et méthodes nécessaires pour la réalisation du programme. En fait, on les mettra dans des slots.
* void openDocument : Ouvrir un document.
* void saveDocument : Enregistrer un document.
* void about : À propos du logiciel.
* void find : Rechercher.
* void stats : Statistiques du document.
Analysons maintenant le fonctionnement de ces méthodes.

#### Analyse du fonctionnement
##### void openDocument

La fonction d'ouverture de document fonctionnera ainsi :
* Après clic sur une action, le slot se déclenche.
* Une boîte de dialogue s'ouvre, où l'on peut choisir le fichier.
* Elle récupère le nom du fichier puis le lit.
* Elle l'affiche dans la zone de texte.

##### void saveDocument

La fonction d'enregistrement du document fonctionnera semblablement à celle de l'ouverture.
* Après clic sur une action, le slot se déclenche.
* Une boîte de dialogue s'ouvre, où l'on peut choisir le nom du fichier et son emplacement.
* Elle enregistre le contenu du fichier à partir du contenu du QTextEdit.

##### void about

Cette fois-ci, ce sera nous qui programmerons la boîte de dialogue, car il n'en existe pas pour ce genre de tâche, exceptée celle de Qt. La boîte de dialogue ressemblera à ça :
Logo (si vous avez les compétences pour le faire). :
| Nom du programme et version ||
| Crédits ||
| Tâche1 | Nom de celui qui l'a réalisé (vous) |

##### void find

Une boîte de dialogue, que nous programmerons, s'affiche, et propose le texte à entrer. Elle le recherche ensuite dans le QTextEdit. Or, il existe une méthode find appartenant aux QTextEdit. Pourquoi ne pas s'en servir ?

##### void stats

Là encore, ce sera notre boîte de dialogue, qui affichera le nombre de caractères avec et sans espaces et le nombre de lignes.

## Aides
### Ouvrir un fichier

Nous allons donc commencer par l'ouverture du fichier. On utilise la classe QFile. Pour cela, on va ouvrir le fichier avec la boîte de dialogue QFileDialog.

### Lire le fichier

C'est très simple. On va vérifier que le fichier n'a pas de problèmes, puis on va mettre le contenu dans un QString.
À présent, je vous laisse, puisqu'on va utiliser une classe que vous connaissez déjà, QTextEdit.

### Enregistrer un fichier
## Correction

Maintenant que vous savez tout, voici la correction.