Tastaturfokus in Widgets
Die Qt Widgets handhaben den Tastaturfokus auf eine Weise, die in grafischen Benutzeroberflächen mittlerweile üblich ist.
Das grundlegende Problem besteht darin, dass die Tastenanschläge des Benutzers auf eines von mehreren Fenstern auf dem Bildschirm und auf eines von mehreren Widgets innerhalb des beabsichtigten Fensters gerichtet sein können. Wenn der Benutzer eine Taste drückt, erwartet er, dass sie an die richtige Stelle gelangt, und die Software muss versuchen, diese Erwartung zu erfüllen. Das System muss ermitteln, an welche Anwendung der Tastenanschlag gerichtet ist, an welches Fenster innerhalb dieser Anwendung und an welches Widget innerhalb dieses Fensters.
Fokusbewegung
Die Konventionen, die sich für die Steuerung des Tastaturfokus auf ein bestimmtes Widget entwickelt haben, lauten wie folgt:
- Der Benutzer drückt „ Tab “ (oder „ Shift+Tab “).
- Der Benutzer klickt auf ein Widget.
- Der Benutzer drückt eine Tastenkombination.
- Der Benutzer verwendet das Mausrad.
- Der Benutzer verschiebt den Fokus auf ein Fenster, und die Anwendung muss ermitteln, welches Widget innerhalb des Fensters den Fokus erhalten soll.
Jeder dieser Bewegungsmechanismen ist anders, und verschiedene Widget-Typen erhalten den Fokus nur bei einigen davon. Wir werden jeden einzelnen der Reihe nach behandeln.
Tab oder Umschalt+Tab
Das Drücken von „ Tab “ ist bei weitem die gängigste Methode, um den Fokus über die Tastatur zu verschieben. (Manchmal hat die Eingabetaste in Dateneingabeanwendungen dieselbe Funktion wie „ Tab “; dies lässt sich in Qt XML leicht durch die Implementierung eines Ereignisfilters erreichen.)
Das Drücken von „ Tab “ verschiebt in allen heute gebräuchlichen Fenstersystemen den Tastaturfokus zum nächsten Widget in einer zirkulären Liste pro Fenster. „ Tab “ bewegt den Fokus entlang der zirkulären Liste in die eine Richtung, „ Shift+Tab “ in die andere. Die Reihenfolge, in der die Tasten „ Tab “ den Fokus von Widget zu Widget verschieben, wird als Tab-Reihenfolge bezeichnet.
Sie können die Tab-Reihenfolge mit QWidget::setTabOrder() anpassen. (Wenn Sie dies nicht tun, bewegt Tab den Fokus in der Regel in der Reihenfolge der Widget-Erstellung.) Qt Widgets Designer bietet eine Möglichkeit, die Tab-Reihenfolge visuell zu ändern.
Da das Drücken von ` Tab ` so häufig vorkommt, sollten die meisten Widgets, die den Fokus erhalten können, den Tab-Fokus unterstützen. Die wichtigste Ausnahme bilden Widgets, die nur selten verwendet werden und bei denen es eine Tastenkombination oder einen Fehlerbehandler gibt, der den Fokus verschiebt.
Beispielsweise könnte es in einem Dateneingabedialog ein Feld geben, das nur in einem Prozent aller Fälle erforderlich ist. In einem solchen Dialog könnte „ Tab “ dieses Feld überspringen, und der Dialog könnte einen der folgenden Mechanismen nutzen:
- OKWenn das Programm feststellen kann, ob das Feld benötigt wird, kann es den Fokus dorthin verschieben, sobald der Benutzer die Eingabe beendet und die Tabulatortaste drückt oder wenn der Benutzer nach dem Ausfüllen der anderen Felder die Eingabetaste drückt. Alternativ kann das Feld in die Tabulatorreihenfolge aufgenommen, aber deaktiviert werden. Es sollte aktiviert werden, sobald dies angesichts der vom Benutzer in den anderen Feldern vorgenommenen Einstellungen angemessen ist.
- Die Beschriftung des Feldes kann eine Tastenkombination enthalten, die den Fokus auf dieses Feld verschiebt.
Eine weitere Ausnahme bei der Unterstützung von „ Tab “ bilden Texteingabe-Widgets, die das Einfügen von Tabulatoren unterstützen müssen; fast alle Texteditoren fallen in diese Kategorie. Qt behandelt „ Ctrl+Tab “ als „ Tab “ und „ Ctrl+Shift+Tab “ als „ Shift+Tab “, und solche Widgets können ` QWidget::event()` neu implementieren und die Tabulatortaste verarbeiten, bevor sie ` QWidget::event()` aufrufen, um die normale Verarbeitung aller anderen Tasten zu gewährleisten. Da jedoch einige Systeme „ Ctrl+Tab “ für andere Zwecke verwenden und viele Benutzer „ Ctrl+Tab “ ohnehin nicht kennen, ist dies keine vollständige Lösung.
Der Benutzer klickt auf ein Widget
Dies kommt vielleicht sogar noch häufiger vor als das Drücken von „ Tab “ auf Computern mit einer Maus oder einem anderen Zeigegerät.
Das Klicken zum Verschieben des Fokus ist etwas leistungsfähiger als „ Tab “. Es verschiebt zwar den Fokus auf ein Widget, bei Editor-Widgets verschiebt es jedoch zusätzlich den Textcursor (den internen Fokus des Widgets) an die Stelle, an der mit der Maus geklickt wurde.
Da dies so verbreitet ist und die Nutzer daran gewöhnt sind, ist es ratsam, diese Funktion für die meisten Widgets zu unterstützen. Es gibt jedoch auch einen wichtigen Grund, dies zu vermeiden: Möglicherweise möchten Sie den Fokus nicht von dem Widget entfernen, auf dem er sich gerade befand.
Was soll beispielsweise in einem Textverarbeitungsprogramm mit dem Tastaturfokus geschehen, wenn der Benutzer auf die Schaltfläche „B“ (Fettdruck) klickt? Soll er dort bleiben, wo er war – mit ziemlicher Sicherheit im Bearbeitungs-Widget – oder soll er auf die Schaltfläche „B“ springen?
Wir empfehlen, „Click-to-Focus“ für Widgets zu unterstützen, die die Texteingabe ermöglichen, und es bei den meisten Widgets zu vermeiden, bei denen ein Mausklick eine andere Wirkung hat. (Für Schaltflächen empfehlen wir außerdem, eine Tastenkombination hinzuzufügen: „ QAbstractButton “ und seine Unterklassen machen dies sehr einfach.)
In Qt beeinflusst ausschließlich die Funktion ` QWidget::setFocusPolicy()` das „Click-to-Focus“-Verhalten.
Der Benutzer drückt eine Tastenkombination
Es ist nicht ungewöhnlich, dass Tastenkombinationen den Fokus verschieben. Dies kann implizit durch das Öffnen modaler Dialoge geschehen, aber auch explizit durch die Verwendung von Fokusbeschleunigern, wie sie beispielsweise von ` QLabel::setBuddy()`, ` QGroupBox` und ` QTabBar` bereitgestellt werden.
Ihre Anwendung kann Fokus-Tastenkombinationen für alle Widgets unterstützen, zu denen der Benutzer springen möchte. Beispielsweise kann ein Registerkarten-Dialogfeld Tastenkombinationen für jede seiner Seiten haben, sodass der Benutzer z. B. Alt+P drücken kann, um zur Seite „Drucken“zu wechseln. Beachten Sie, dass man es hier leicht übertreiben kann, da nur wenige Tasten zur Verfügung stehen, und dass es zudem wichtig ist, Tastenkombinationen für Befehle bereitzustellen. Beachten Sie die Designrichtlinien für die von Ihnen angestrebte Plattform, zum Beispiel die Richtlinien von Microsoft für die Gestaltung von Tastatur-Benutzeroberflächen oder die Fokus- und Auswahllinien von Apple.
Der Benutzer dreht das Mausrad
Unter Microsoft Windows wird die Verwendung des Mausrads immer von dem Widget verarbeitet, das den Tastaturfokus hat. Unter macOS und X11 wird dies von dem Widget verarbeitet, das andere Mausereignisse empfängt.
Qt gleicht diesen Plattformunterschied aus, indem es Widgets ermöglicht, den Tastaturfokus zu verschieben, wenn das Mausrad verwendet wird. Mit der richtigen Fokusrichtlinie für jedes Widget können Anwendungen unter Windows, macOS und X11 idiomatisch korrekt funktionieren.
Der Benutzer verschiebt den Fokus auf dieses Fenster
In dieser Situation muss die Anwendung feststellen, welches Widget innerhalb des Fensters den Fokus erhalten soll.
Das kann einfach sein: Wenn der Fokus bereits zuvor in diesem Fenster lag, sollte das Widget, das zuletzt den Fokus hatte, diesen wieder erhalten. Qt erledigt dies automatisch.
Wenn der Fokus noch nie zuvor in diesem Fenster lag und Sie wissen, wo der Fokus beginnen soll, rufen Sie ` QWidget::setFocus()` für das Widget auf, das den Fokus erhalten soll, bevor Sie ` QWidget::show()` dafür aufrufen. Wenn Sie dies nicht tun, wählt Qt ein geeignetes Widget aus.
© 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.