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)
Le bouton
pbEffacer
doit provoquer l'effacement de la zone de texte.Le bouton
pbAjouter
doit ajouter àteTexte
la ligne saisie dansleTexte
.
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 signalclicked
du bouton existe et le slot pour effacer la zone de texte existe également.Pour le bouton
pbAjouter
, il faudra connecter son signalclicked()
au slotonClickedpbAjouter()
.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.
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).
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 boutonDans 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'objetteTexte
.