Skip to content
Zurück zum Blog
· 4 Min. Lesezeit

Qt Virtual Keyboard: Bildschirmtastatur für Embedded-Geräte richtig einsetzen

Wie die Qt Virtual Keyboard in eine Embedded-HMI kommt: Integration über das Input-Method-Modul, Layouts und Sprachen, Anpassung ans eigene Design – und die Lizenzfrage, die man vorher klären sollte.

Ablaufdiagramm der Qt Virtual Keyboard: ein Eingabefeld in QML erhält den Fokus, das über QT_IM_MODULE geladene Input-Method-Modul meldet die Tastatur an, das InputPanel wird eingeblendet und der Text fließt über das Input-Method-Framework zurück in das Eingabefeld; daneben die Bausteine Layouts, Sprachen und eigenes Styling.

Kurz gesagt: Ein Embedded-Gerät mit Touch-Display braucht eine Bildschirmtastatur, sobald irgendwo ein Text eingegeben wird – ein WLAN-Passwort, ein Gerätename, ein Sollwert. Die Qt Virtual Keyboard liefert das fertig, inklusive Layouts, Sprachen und Anbindung an das Eingabesystem von Qt. Die technische Integration ist an einem Nachmittag erledigt. Die Frage, die man vorher klären sollte, ist die Lizenz: Dieses Modul steht nicht unter denselben Bedingungen wie der Großteil von Qt.

Zuerst die Lizenzfrage

Der Großteil der Qt-Module ist so lizenziert, dass sie sich in kommerziellen Produkten mit dynamischem Linken vergleichsweise unkompliziert einsetzen lassen. Die Qt Virtual Keyboard gehört zu den Modulen, für die das nicht pauschal gilt – ihre Open-Source-Variante steht unter strengeren Bedingungen, die für ein geschlossenes Produkt Folgen haben können.

Das ist kein Grund, das Modul zu meiden; es ist ein Grund, die Frage früh zu stellen. Die konkrete Antwort hängt an Ihrer Qt-Version, an Ihrem Vertriebsmodell und daran, ob Sie ohnehin eine kommerzielle Qt-Lizenz halten. Klären Sie das mit The Qt Company oder juristischem Rat, bevor die Tastatur fest in der Oberfläche verankert ist – ein späterer Austausch ist deutlich teurer als eine Entscheidung am Anfang. (Das hier ist eine technische Einordnung, keine Rechtsberatung.)

Wie die Integration funktioniert

Qt trennt Eingabemethoden von den Eingabefeldern. Ein TextField weiß nichts von einer Tastatur – es meldet nur, dass es den Fokus hat. Ein Input-Method-Modul entscheidet daraufhin, was passiert. Auf dem Desktop übernimmt das das Betriebssystem; auf einem Embedded-Gerät ohne Fenstersystem gibt es niemanden, der das täte – genau diese Rolle füllt die Qt Virtual Keyboard.

Aktiviert wird sie über eine Umgebungsvariable, die vor dem Erzeugen der Anwendung gesetzt sein muss:

int main(int argc, char *argv[])
{
    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
    QGuiApplication app(argc, argv);
    // …
}

Alternativ über die Umgebung des Dienstes, was für ein Systemd-basiertes Gerät oft sauberer ist:

export QT_IM_MODULE=qtvirtualkeyboard

In der QML-Szene braucht es dann ein InputPanel, das die Tastatur darstellt. Es wird typischerweise am unteren Rand verankert und blendet sich selbst ein, sobald ein Eingabefeld den Fokus bekommt:

import QtQuick
import QtQuick.VirtualKeyboard

Item {
    id: root

    TextField {
        id: nameField
        anchors.centerIn: parent
        placeholderText: qsTr("Gerätename")
    }

    InputPanel {
        id: inputPanel
        z: 99
        anchors.left: parent.left
        anchors.right: parent.right
        // Unterhalb des Bildschirms parken und nur bei Bedarf hereinfahren
        y: root.height - (active ? height : 0)

        Behavior on y {
            NumberAnimation { duration: 150; easing.type: Easing.InOutQuad }
        }
    }
}

Drei Details entscheiden darüber, ob das im Alltag trägt. Der z-Wert sorgt dafür, dass die Tastatur über der übrigen Oberfläche liegt – ohne ihn verschwindet sie hinter Hintergrundflächen. Die Verankerung am unteren Rand samt Animation ist das erwartete Verhalten; eine Tastatur, die einfach erscheint, wirkt abrupt. Und das Nachführen des Eingabefelds: Wenn die Tastatur die untere Bildschirmhälfte einnimmt, muss das aktive Feld sichtbar bleiben – sonst tippt der Nutzer blind.

Layouts, Sprachen und Größe

Die Tastatur bringt Layouts für viele Sprachen mit, dazu optional Handschrifterkennung. Für ein Gerät, das im Feld zwei Sprachen bedient, ist es sinnvoll, den Build auf genau diese zu beschränken – jedes zusätzliche Layout kostet Platz im Image und Zeit beim Start. Die Auswahl geschieht über Konfigurationsschalter beim Bau des Moduls; in einem Yocto-basierten Image gehört diese Entscheidung in das Rezept, nicht in ein nachträgliches Skript.

Umgekehrt gilt: Ein Gerät, das weltweit ausgeliefert wird und dessen Nutzer Namen in ihrer eigenen Schrift eingeben sollen, braucht die entsprechenden Layouts – und ein Konzept dafür, wie der Nutzer zwischen ihnen umschaltet, ohne sich zu verirren.

Ans eigene Design anpassen

Eine unveränderte Standardtastatur in einer sonst sorgfältig gestalteten Oberfläche fällt sofort auf. Das Modul bringt dafür ein eigenes Styling-System mit: Farben, Tastenformen, Schriftgrößen und Abstände lassen sich austauschen, ohne die Eingabelogik anzufassen. Das eigene Style wird über eine Umgebungsvariable ausgewählt und liegt als QML-Ressource im Anwendungs-Build.

Was dabei erfahrungsgemäß unterschätzt wird, ist die Tastengröße. Auf einem 7-Zoll-Display mit Handschuhbedienung sind die Standardmaße zu klein; das merkt man erst im Feldtest, wenn Bedienfehler auffallen. Diese Frage gehört an den Anfang, weil sie das Layout der gesamten Eingabemaske beeinflusst.

Wenn es nicht funktioniert

SymptomWahrscheinliche Ursache
Tastatur erscheint nieQT_IM_MODULE nicht gesetzt oder zu spät gesetzt
Tastatur ist da, aber unsichtbarFehlender z-Wert, liegt hinter anderen Elementen
Eingabefeld wird verdecktKein Nachführen der Ansicht bei aktiver Tastatur
Falsches LayoutGewünschte Sprache nicht mit einkompiliert
Tasten reagieren trägeZu viele Animationen oder fehlende Hardwarebeschleunigung
Tastatur startet mit, obwohl nie gebrauchtModul wird eingebunden, ohne dass ein Feld existiert

Der letzte Punkt lohnt einen Blick, wenn die Boot-Zeit knapp ist: Ein Gerät, das nur bei der Erstinbetriebnahme eine Texteingabe braucht, muss die Tastatur nicht bei jedem Start bereithalten.

Fazit

Technisch ist die Qt Virtual Keyboard eine unaufgeregte Angelegenheit: Umgebungsvariable setzen, InputPanel platzieren, Fokus und Sichtbarkeit sauber behandeln. Die beiden Punkte, die Projekte tatsächlich aufhalten, liegen woanders – die Lizenzfrage, die vor der Integration gehört, und die Gestaltung, die früh genug entschieden sein will, weil sie das Layout der Eingabemasken prägt. Wie Qt-Oberflächen auf begrenzter Hardware insgesamt flüssig bleiben, haben wir im Beitrag Qt im Embedded-Umfeld beschrieben; die Grundlagen dazu vermitteln wir auch in unserer Qt- und QML-Schulung. Wenn Sie eine HMI planen und die Eingabewege noch offen sind, sprechen Sie uns an.

Häufige Fragen

Welche Lizenz gilt für die Qt Virtual Keyboard?
Das ist der wichtigste Punkt vor der Integration: Das Modul steht nicht unter derselben Lizenz wie der Großteil von Qt. Für ein kommerzielles Produkt ist deshalb eine bewusste Prüfung nötig, ob die Open-Source-Bedingungen tragfähig sind oder eine kommerzielle Qt-Lizenz gebraucht wird. Die Antwort hängt an Ihrer Qt-Version und Ihrem Vertriebsmodell – klären Sie sie mit The Qt Company oder juristischem Rat, bevor die Tastatur im Produkt landet, nicht danach.
Warum erscheint die Tastatur nicht, obwohl alles eingebunden ist?
Fast immer fehlt die Umgebungsvariable `QT_IM_MODULE=qtvirtualkeyboard`, oder die Anwendung setzt sie zu spät – sie muss vor dem Erzeugen der QGuiApplication stehen. Zweithäufigste Ursache: Es gibt kein `InputPanel`-Element in der QML-Szene, oder es liegt hinter anderen Elementen und wird verdeckt. Ein `z`-Wert und die richtige Elternschaft lösen das.
Können wir das Aussehen an unser Produkt anpassen?
Ja. Die Tastatur bringt ein eigenes Styling-System mit, über das sich Farben, Tastenformen, Schrift und Abstände austauschen lassen, ohne die Logik anzufassen. In der Praxis lohnt es sich, das früh zu machen: Eine Standardtastatur in einer sonst durchgestalteten Oberfläche fällt sofort auf.
Wie viel kostet die Tastatur an Speicher und Startzeit?
Spürbar, wenn man alle Sprachlayouts und die Handschrifterkennung einbindet. Für ein Gerät mit einer oder zwei Sprachen lohnt es sich, den Build auf die tatsächlich benötigten Layouts zu beschränken – das reduziert sowohl das Image als auch die Zeit bis zur ersten Anzeige.

Alexander Nassian

Geschäftsführer, bitshift dynamics

Entwickelt mit seinem Team hardwarenahe Software für Embedded-Produkte – C++, Qt/QML, Embedded Linux und das Yocto Project. bitshift dynamics arbeitet seit 2005 in diesem Feld.

Verwandte Beiträge

· 6 Min. Lesezeit

Qt im Embedded-Umfeld

Wie Qt moderne Bedienoberflächen auf ressourcenbeschränkte Hardware bringt – von QML und Hardwarebeschleunigung bis zu Boot-Zeit und schlankem Stack.

  • Qt
  • QML
  • Embedded Linux
Weiterlesen
· 4 Min. Lesezeit

EGLFS: Qt ohne Fenstersystem auf Embedded-Hardware betreiben

Wie Qt mit EGLFS direkt auf die Grafikhardware zeichnet – Backends, KMS-Konfiguration, Eingabegeräte und die Fehlerbilder, die beim ersten schwarzen Bildschirm helfen.

  • Qt
  • EGLFS
  • Embedded Linux
Weiterlesen

Steht bei Ihnen eine ähnliche Aufgabe an?

Wir begleiten Embedded-Teams genau bei solchen Fragestellungen – von der Architekturentscheidung bis zur Serienreife. Schildern Sie uns kurz Ihr Vorhaben.

Projekt anfragen