Ma première IHM

Question

Je vous propose de créer une application nommée appIHM1 avec une IHM contenant les champs suivants :

  • 2 boutons (QPushButton nommés respectivement pbEffacer et pbAjouter)

  • une ligne de texte (QLineEdit nommée leTexte)

  • une zone de texte (QTextEdit nommée teTexte)

  1. Le bouton pbEffacer doit provoquer l'effacement de la zone de texte.

  2. Le bouton pbAjouter doit ajouter à teTexte la ligne saisie dans leTexte.

Dans un second temps, vous vous apercevrez qu'il est possible d'entrer du texte directement. Supprimez cette possibilité.

Indice

  • Le signal/slot du bouton pbEffacer peut être géré de manière uniquement graphique (sans ajout de ligne de code) dans l'éditeur d'IHM car le signal clicked du bouton existe et le slot pour effacer la zone de texte existe également.

  • Pour le bouton pbAjouter, il faudra connecter son signal clicked() au slot onClickedpbAjouter().

    Ce slot devra être créé dans la classe d'application. Il contiendra la ligne de code permettant d'ajouter la ligne dans la zone de texte.

IHM1 demandée

Solution

Effacement de la zone de texte

En mode Design :

  • Cliquez sur le bouton Edit Signals/Slots (ou touche F4)

  • Cliquez sur le bouton souris en maintenant appuyé et déplacez-vous sur le zone de texte. Une flèche apparaît ainsi qu’une fenêtre.

  • Choisissez le signal souhaité du bouton (clicked()) et le slot existant de l'objet (clear())

  • Cliquez sur le bouton Edit Widgets (F3).

Signal/slot graphique
Ajouter du texte dans la zone dédiée
  • Commencez par cliquez droit sur le bouton et choisissez dans le menu contextuel Go to slot. Cela va automatiquement créer un slot de réaction au signal clicked() pour le bouton

  • Dans le code source du slot on_pbAjouter_clicked() créé, ajoutez la ligne de code suivante :

ui->teTexte->append(ui->leTexte->text());

 

Qu'avons-nous écrit ?

Nous avons invoqué la méthode append() de l'objet leTexte (zone de texte) et lui avons fourni en paramètre le texte à ajouter issu de la ligne de texte (accesseur text() de l'objet leTexte, la ligne de texte).

Rendre impossible l'ajout de texte dans la zone dédiée
  • Il suffit de cliquer sur la propriété readOnly de l'objet teTexte.