Beispiel für „Quick Speech“
Das „Quick Speech“-Beispiel liest vom Benutzer bereitgestellten Text vor.

Das „Quick Speech“-Beispiel veranschaulicht, wie der Typ „ TextToSpeech “ in einer Qt Quick Anwendung zum Vorlesen von Text und zur Steuerung der Sprachausgabe eingesetzt werden kann.
Das Beispiel verwendet Qt Quick Controls , um Steuerelemente für Tonhöhe, Lautstärke und Sprechgeschwindigkeit bereitzustellen. Außerdem ermöglicht es dem Benutzer, eine Engine, eine Sprache und eine Stimme auszuwählen.
Initialisierung eines TextToSpeech-Objekts
Zunächst initialisieren wir das Text-to-Speech-Objekt ` tts`:
TextToSpeech {
id: tts
volume: volumeSlider.value
pitch: pitchSlider.value
rate: rateSlider.valueAbrufen des Status
Mithilfe von „Switch“-Anweisungen wird das Label „ statusLabel “ in der Fußzeile aktualisiert.
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
}
}Hervorheben von Wörtern während der Wiedergabe
Das „ TextArea “ input wird verwendet, um den einzugebenden Text und das Signal „ onSayingWord “ als Auslöser abzurufen sowie um die Position zu ermitteln, an der Wörter während der Wiedergabe hervorgehoben werden sollen.
onSayingWord: (word, id, start, length)=> {
input.select(start, start + length)
}Die „ TextArea “ input wird hier deklariert:
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
}Steuerung der Sprachausgabe
Button Die Typen werden mit einem „ RowLayout “ angeordnet und so konfiguriert, dass sie das „ TextToSpeech “ „ tts “ steuern.
Die Schaltfläche „Speak“
Es wird ein „ Button “ mit der Bezeichnung „Speak“ erstellt. Er ist aktiviert, wenn die State-Eigenschaft von „ tts “ entweder „ Paused “ oder „ Ready “ ist. Wenn auf die Schaltfläche geklickt wird, werden die auf den Zielgeräten verfügbaren Stimmen abgerufen, und „ tts.voice “ wird auf die aktuell ausgewählte Stimme von „ voicesComboBox “ gesetzt. Anschließend wird „ TextToSpeech::say()“ aufgerufen, wobei der Text in „ inputbox “ übergeben wird.
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)
}
}Die Schaltflächen „Pause“, „Fortsetzen“ und „Stopp“
Diese Schaltflächen werden ähnlich wie die Schaltfläche „ Speak “ implementiert:
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()
}Auswahl der Text-to-Speech-Optionen
Ein „ GridLayout “ wird verwendet, um die Steuerelemente und Beschriftungen für die Auswahl der Optionen „Engine“, „Locale“, „Stimme“, „Lautstärke“, „Tonhöhe“ und „Sprechgeschwindigkeit“ für die Text-zu-Sprache-Synthese anzuordnen.
Auswahl von Engine, Sprachregion und Stimme
Zur Auswahl dieser Parameter wird eine Gruppe von „ ComboBox “-Komponenten verwendet.
Für das „ ComboBox “ zur Engine-Auswahl wird „ tts.availableEngines() “ als Vorlage verwendet.
Die „ onActivated “ veranlasst die Zuweisung des aktuellen Textes am aktuellen Index der ComboBox an „tts.engine“.
Label {
text: qsTr("Engine:")
}
ComboBox {
id: enginesComboBox
Layout.fillWidth: true
model: tts.availableEngines()
onActivated: {
tts.engine = textAt(currentIndex)
updateLocales()
updateVoices()
}
}Die letzten beiden Zeilen im obigen Codeausschnitt zeigen, dass an dieser Stelle auch die verfügbaren Sprachumgebungen und Stimmen aktualisiert werden, da diese von der ausgewählten Engine abhängen. Diese Funktionen werden in einem folgenden Abschnitt behandelt.
Die Methode „ localesComboBox “ ist genauso implementiert wie „ engineComboBox “, aktualisiert jedoch nicht die verfügbaren Engines.
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
}Auswahl von Lautstärke, Tonhöhe und Sprechgeschwindigkeit
Diese Steuerelemente werden mit „ Sliders “ wie folgt implementiert:
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
}
}
}Aktualisierung der verfügbaren Optionen
Mithilfe des Signals „ Component.onCompleted “ wird Folgendes ausgeführt, sobald die Stammkomponente „ ApplicationWindow “ instanziiert wurde.
- Der Index „
enginesComboBox“ wird auf die aktuell eingestellte Engine von „tts“ gesetzt. - Die verfügbaren Sprachumgebungen und Stimmen werden aktualisiert.
- Der aktuelle Status von `
tts` wird gemeldet.
Component.onCompleted: {
enginesComboBox.currentIndex = tts.availableEngines().indexOf(tts.engine)
// some engines initialize asynchronously
if (tts.state == TextToSpeech.Ready) {
engineReady()Die in der gesamten Anwendung verwendeten Funktionen „ updateLocales() “ und „ updateVoice() “ sind wie folgt implementiert:
} 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 = indexOfVoiceAusführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ über „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
© 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.