Exemple de discours rapide
L'exemple de discours rapide lit un texte fourni par l'utilisateur.

L'exemple Quick Speech montre comment le type TextToSpeech peut être utilisé dans une application pour lire un texte et contrôler la parole. Qt Quick pour lire un texte et contrôler le discours.
L'exemple utilise Qt Quick Controls pour contrôler la hauteur, le volume et le débit de la parole. Il permet également à l'utilisateur de sélectionner un moteur, une langue et une voix.
Initialisation d'un TextToSpeech
Nous commençons par initialiser l'objet TextToSpeech tts:
TextToSpeech { id: tts volume: volumeSlider.value pitch: pitchSlider.value rate: rateSlider.value
Obtenir l'état
Les cas de commutation sont utilisés pour mettre à jour l'étiquette statusLabel dans le pied de page.
onStateChanged: updateStateLabel(state) function updateStateLabel(state) { switch (state) { case TextToSpeech.Ready: statusLabel.text = qsTr("Ready") break case TextToSpeech.Speaking: statusLabel.text = qsTr("Speaking") break case TextToSpeech.Paused: statusLabel.text = qsTr("Paused...") break case TextToSpeech.Error: statusLabel.text = qsTr("Error!") break } }
Mise en évidence des mots au fur et à mesure qu'ils sont prononcés
L'objet TextArea input est utilisé pour obtenir le texte à saisir et le signal onSayingWord comme déclencheur, ainsi que pour connaître la position de mise en évidence des mots au fur et à mesure qu'ils sont prononcés.
onSayingWord: (word, id, start, length)=> { input.select(start, start + length) }
Le TextArea input est déclaré ici :
ColumnLayout { anchors.fill: parent anchors.margins: 8 id: inputForm TextArea { id: input wrapMode: TextEdit.WordWrap text: qsTr("Hello, world!") Layout.fillWidth: true Layout.minimumHeight: implicitHeight font.pointSize: 24 }
Contrôle de la parole
Button Les types d'appareils sont disposés avec un RowLayout et configurés pour contrôler le TextToSpeech tts .
Le bouton "parler
Un site Button intitulé "Speak" est créé. Il est activé si la propriété d'état de tts est soit Paused, soit Ready. Lorsque le bouton est cliqué, les voix disponibles sur les dispositifs cibles sont récupérées et tts.voice est réglé sur la voix actuellement sélectionnée de voicesComboBox. Ensuite, TextToSpeech::say() est appelé et reçoit le texte dans inputbox.
RowLayout { Button { text: qsTr("Speak") enabled: [TextToSpeech.Paused, TextToSpeech.Ready].includes(tts.state) onClicked: { let voices = tts.availableVoices() tts.voice = voices[voicesComboBox.currentIndex] tts.say(input.text) } }
Les boutons de pause, de reprise et d'arrêt
La mise en œuvre de ces boutons est similaire à celle du bouton Speak:
Button { text: qsTr("Pause") enabled: tts.state == TextToSpeech.Speaking onClicked: tts.pause() visible: tts.engineCapabilities & TextToSpeech.Capabilities.PauseResume } Button { text: qsTr("Resume") enabled: tts.state == TextToSpeech.Paused onClicked: tts.resume() visible: tts.engineCapabilities & TextToSpeech.Capabilities.PauseResume } Button { text: qsTr("Stop") enabled: [TextToSpeech.Speaking, TextToSpeech.Paused].includes(tts.state) onClicked: tts.stop() }
Sélection des options de synthèse vocale
Un site GridLayout est utilisé pour organiser les commandes et les étiquettes permettant de sélectionner les options de moteur, de locale, de voix, de volume, de hauteur et de débit pour la synthèse vocale.
Sélection du moteur, de la locale et de la voix
Un groupe de composants ComboBox est utilisé pour sélectionner ces paramètres.
Pour la sélection du moteur, ComboBox, tts.availableEngines() est utilisé comme modèle.
L'adresse onActivated déclenche l'attribution à tts.engine du texte actuel à l'index actuel des ComboBox.
Label { text: qsTr("Engine:") } ComboBox { id: enginesComboBox Layout.fillWidth: true model: tts.availableEngines() onActivated: { tts.engine = textAt(currentIndex) updateLocales() updateVoices() } }
Les deux dernières lignes de l'extrait de code ci-dessus montrent que les locales et les voix disponibles sont également mises à jour à ce stade, car elles dépendent du moteur sélectionné. Ces fonctions sont abordées dans la section suivante.
La fonction localesComboBox est mise en œuvre de la même manière que engineComboBox, mais sans mise à jour des moteurs disponibles.
Label { text: qsTr("Locale:") } ComboBox { id: localesComboBox Layout.fillWidth: true onActivated: { let locales = tts.availableLocales() tts.locale = locales[currentIndex] updateVoices() } } Label { text: qsTr("Voice:") } ComboBox { id: voicesComboBox Layout.fillWidth: true }
Sélection du volume, de la hauteur et de la vitesse
Ces commandes sont mises en œuvre avec Sliders de la manière suivante :
Label { text: qsTr("Volume:") } Slider { id: volumeSlider from: 0 to: 1.0 stepSize: 0.2 value: 0.8 Layout.fillWidth: true } Label { text: qsTr("Pitch:") } Slider { id: pitchSlider from: -1.0 to: 1.0 stepSize: 0.5 value: 0 Layout.fillWidth: true } Label { text: qsTr("Rate:") } Slider { id: rateSlider from: -1.0 to: 1.0 stepSize: 0.5 value: 0 Layout.fillWidth: true } } }
Mise à jour des options disponibles
En utilisant le signal Component.onCompleted, les opérations suivantes sont effectuées une fois que la racine ApplicationWindow a été instanciée.
- L'index
enginesComboBoxest remplacé par le moteur actuellement défini pourtts. - Les locales et les voix disponibles sont mises à jour.
- L'état actuel de
ttsest signalé.
Component.onCompleted: { enginesComboBox.currentIndex = tts.availableEngines().indexOf(tts.engine) // some engines initialize asynchronously if (tts.state == TextToSpeech.Ready) { engineReady()
Utilisées tout au long de l'application, les fonctions updateLocales() et updateVoice() sont mises en œuvre comme suit :
} else { tts.stateChanged.connect(root.engineReady) } tts.updateStateLabel(tts.state) } function engineReady() { tts.stateChanged.disconnect(root.engineReady) if (tts.state != TextToSpeech.Ready) { tts.updateStateLabel(tts.state) return; } updateLocales() updateVoices() } function updateLocales() { let allLocales = tts.availableLocales().map((locale) => locale.nativeLanguageName) let currentLocaleIndex = allLocales.indexOf(tts.locale.nativeLanguageName) localesComboBox.model = allLocales localesComboBox.currentIndex = currentLocaleIndex } function updateVoices() { voicesComboBox.model = tts.availableVoices().map((voice) => voice.name) let indexOfVoice = tts.availableVoices().indexOf(tts.voice) voicesComboBox.currentIndex = indexOfVoice
Exécution de l'exemple
Pour exécuter l'exemple à partir de Qt Creatorouvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.