QInputMethodEvent Class
Die Klasse „QInputMethodEvent“ stellt Parameter für Ereignisse der Eingabemethode bereit. Mehr...
| Header: | #include <QInputMethodEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Erbt von: | QEvent |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QInputMethodEvent ist Teil der Ereignisklassen.
Öffentliche Typen
| class | Attribute |
| enum | AttributeType { TextFormat, Cursor, Language, Ruby, Selection, MimeData } |
Öffentliche Funktionen
| QInputMethodEvent() | |
| QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes) | |
| const QList<QInputMethodEvent::Attribute> & | attributes() const |
| const QString & | commitString() const |
| const QString & | preeditString() const |
| int | replacementLength() const |
| int | replacementStart() const |
| void | setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0) |
Geschützte Funktionen
| QInputMethodEvent(QInputMethodEvent &&) | |
| QInputMethodEvent & | operator=(QInputMethodEvent &&) |
| QInputMethodEvent & | operator=(const QInputMethodEvent &other) |
Ausführliche Beschreibung
Eingabemethode-Ereignisse werden an Widgets gesendet, wenn eine Eingabemethode zur Texteingabe in ein Widget verwendet wird. Eingabemethoden werden häufig zur Texteingabe für Sprachen mit nicht-lateinischen Alphabeten verwendet.
Beachten Sie, dass beim Erstellen benutzerdefinierter Textbearbeitungs-Widgets das Fensterattribut „ Qt::WA_InputMethodEnabled “ explizit (mithilfe der Funktion „ QWidget::setAttribute()“) gesetzt werden muss, um Eingabemethoden-Ereignisse empfangen zu können.
Die Ereignisse sind für Entwickler von Tastatureingabe-Widgets von Interesse, die Sprachen mit komplexer Zeicheneingabe korrekt verarbeiten möchten. Die Texteingabe in solchen Sprachen erfolgt in der Regel in drei Schritten:
- Beginn der Eingabe
Wenn der Benutzer die erste Taste auf einer Tastatur drückt, wird ein Eingabekontext erstellt. Dieser Eingabekontext enthält eine Zeichenkette aus den eingegebenen Zeichen.
- Erstellen
Mit jedem neuen Tastendruck versucht die Eingabemethode, eine passende Zeichenkette für den bisher eingegebenen Text zu erstellen, die als „Preedit-Zeichenkette“ bezeichnet wird. Solange der Eingabekontext aktiv ist, kann der Benutzer den Cursor nur innerhalb der zu diesem Eingabekontext gehörenden Zeichenkette bewegen.
- Vervollständigung
Zu einem bestimmten Zeitpunkt aktiviert der Benutzer eine Komponente der Benutzeroberfläche (möglicherweise über eine bestimmte Taste), in der er aus einer Reihe von Zeichenfolgen auswählen kann, die mit dem bisher eingegebenen Text übereinstimmen. Der Benutzer kann entweder seine Auswahl bestätigen oder die Eingabe abbrechen; in beiden Fällen wird der Eingabekontext geschlossen.
QInputMethodEvent modelliert diese drei Phasen und überträgt die Informationen, die zur korrekten Darstellung des Zwischenergebnisses benötigt werden. Ein QInputMethodEvent verfügt über zwei Hauptparameter: ` preeditString()` und ` commitString()`. Der Parameter ` preeditString()` gibt die aktuell aktive Preedit-Zeichenkette zurück. Der Parameter ` commitString()` gibt einen Text zurück, der dem Text des Editor-Widgets hinzugefügt werden (oder Teile davon ersetzen) soll. Er ist in der Regel das Ergebnis der Eingabeoperationen und muss direkt vor der Preedit-Zeichenkette in den Text des Widgets eingefügt werden.
Sollte die Funktion „ commitString()“ Teile des Textes im Editor ersetzen, enthält „ replacementLength()“ die Anzahl der zu ersetzenden Zeichen. „ replacementStart()“ enthält die Position, an der Zeichen relativ zum Anfang der Preedit-Zeichenkette ersetzt werden sollen.
Eine Reihe von Attributen steuert die visuelle Darstellung der Preedit-Zeichenkette (die visuelle Darstellung von Text außerhalb der Preedit-Zeichenkette wird ausschließlich vom Widget gesteuert). Die Enumeration ` AttributeType ` beschreibt die verschiedenen Attribute, die gesetzt werden können.
Eine Klasse, die QWidget::inputMethodEvent() oder QGraphicsItem::inputMethodEvent() implementiert, sollte zumindest die Attribute TextFormat und Cursor verstehen und berücksichtigen.
Da Eingabemethoden in der Lage sein müssen, bestimmte Eigenschaften vom Widget oder Grafikelement abzufragen, müssen Unterklassen ebenfalls die Methoden ` QWidget::inputMethodQuery()` bzw. ` QGraphicsItem::inputMethodQuery()` implementieren.
Beim Empfang eines Ereignisses der Eingabemethode muss das Text-Widget die folgenden Schritte ausführen:
- Wenn das Widget ausgewählten Text enthält, sollte dieser entfernt werden.
- Entferne den Text, beginnend bei ` replacementStart()` mit der Länge ` replacementLength()`, und ersetze ihn durch ` commitString()`. Ist ` replacementLength()` gleich 0, liefert ` replacementStart()` die Einfügeposition für ` commitString()`.
Beim Ersetzen wird der Bereich der Preedit-Zeichenkette ignoriert. Daher entfernt ein Ersetzen, das bei -1 beginnt und eine Länge von 2 hat, das letzte Zeichen vor der Preedit-Zeichenkette und das erste Zeichen danach und fügt die Commit-Zeichenkette direkt vor der Preedit-Zeichenkette ein.
Wenn das Widget „Rückgängig“ und „Wiederherstellen“ unterstützt, wird dieser Vorgang dem Rückgängig-Stapel hinzugefügt.
- Wenn derzeit kein „preedit“-String vorhanden ist, wird der „ preeditString()“ an der aktuellen Cursorposition eingefügt; andernfalls wird der vorherige „ preeditString “ durch den aus diesem Ereignis empfangenen ersetzt.
Wenn das Widget „Rückgängig/Wiederherstellen“ implementiert, darf die Funktion ` preeditString()` den Rückgängig-Stapel in keiner Weise beeinflussen.
Das Widget sollte die Liste der Attribute prüfen, die auf die Vorbearbeitungszeichenfolge anzuwenden sind. Es muss mindestens die Attribute ` TextFormat ` und `Cursor` verstehen und diese wie angegeben darstellen.
Siehe auch „ QInputMethod “.
Dokumentation zum Mitgliedstyp
enum QInputMethodEvent::AttributeType
| Konstante | Wert | Beschreibung |
|---|---|---|
QInputMethodEvent::TextFormat | 0 | Ein „ QTextCharFormat “ für den durch „start“ und „length“ angegebenen Teil der Preedit-Zeichenkette. „value“ enthält ein „ QVariant “ vom Typ „ QTextFormat “, das die Darstellung dieses Teils der Preedit-Zeichenkette festlegt. Für jeden Teil der Preedit-Zeichenkette sollte höchstens ein Format vorhanden sein. Wenn für ein Zeichen in der Zeichenkette mehrere Formate angegeben sind, ist das Verhalten undefiniert. Eine konforme Implementierung muss mindestens die Eigenschaften „backgroundColor“, „textColor“ und „fontUnderline“ des Formats berücksichtigen. |
QInputMethodEvent::Cursor | 1 | Wenn gesetzt, sollte ein Cursor innerhalb der Preedit-Zeichenkette an der Position „start“ angezeigt werden. Die Variable „length“ bestimmt, ob der Cursor sichtbar ist oder nicht. Ist die Länge 0, ist der Cursor unsichtbar. Ist „value“ ein „ QVariant “ vom Typ „ QColor “, wird diese Farbe für die Darstellung des Cursors verwendet, andernfalls wird die Farbe des umgebenden Textes verwendet. Pro Ereignis darf höchstens ein „Cursor“-Attribut vorhanden sein. Werden mehrere angegeben, ist das Verhalten undefiniert. |
QInputMethodEvent::Language | 2 | Die Variante enthält ein „ QLocale “-Objekt, das die Sprache eines bestimmten Teils der Vorbearbeitungszeichenfolge angibt. Für jeden Teil der Vorbearbeitungszeichenfolge sollte höchstens eine Sprache festgelegt sein. Werden für ein beliebiges Zeichen in der Zeichenfolge mehrere Sprachen angegeben, ist das Verhalten undefiniert. |
QInputMethodEvent::Ruby | 3 | Der Ruby-Text für einen Teil der Preedit-Zeichenkette. Für jeden Teil der Preedit-Zeichenkette sollte höchstens ein Ruby-Text festgelegt sein. Werden für ein beliebiges Zeichen in der Zeichenkette mehrere angegeben, ist das Verhalten undefiniert. |
QInputMethodEvent::Selection | 4 | Wenn gesetzt, soll der Bearbeitungscursor an die angegebene Position im Textinhalt des Editors verschoben werden. Im Gegensatz zu „ Cursor “ wirkt sich dieses Attribut nicht auf den Preedit-Text aus, sondern auf den umgebenden Text. Der Cursor wird verschoben, nachdem die Commit-Zeichenkette übernommen wurde, und die Preedit-Zeichenkette befindet sich an der neuen Bearbeitungsposition. Die Startposition gibt die neue Position an, und die Variable „length“ kann verwendet werden, um eine Auswahl ab diesem Punkt festzulegen. Der Wert wird nicht verwendet. |
QInputMethodEvent::MimeData | 5 | Falls gesetzt, enthält die Variante ein „ QMimeData “-Objekt, das den festgeschriebenen Text repräsentiert. Die Funktion „ commitString()“ liefert weiterhin die Klartextdarstellung des festgeschriebenen Textes. |
Siehe auch ` Attribute`.
Dokumentation der Mitgliedsfunktionen
QInputMethodEvent::QInputMethodEvent()
Erstellt ein Ereignis vom Typ „ QEvent::InputMethod “. Die Methoden „ attributes()“, „ preeditString()“, „ commitString()“, „ replacementStart()“ und „ replacementLength()“ werden mit Standardwerten initialisiert.
Siehe auch setCommitString().
QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
Erstellt ein Ereignis vom Typ „ QEvent::InputMethod “. Der „preedit“-Text wird auf „ preeditText “ gesetzt, die Attribute auf „ attributes “.
Die Werte für ` commitString()`, ` replacementStart()` und ` replacementLength()` können mit ` setCommitString()` festgelegt werden.
Siehe auch „ preeditString()“ und „ attributes()“.
[protected delete] QInputMethodEvent::QInputMethodEvent(QInputMethodEvent &&)
Erstellt eine Instanz von ` QInputMethodEvent`. Diese Funktion wurde gelöscht.
const QList<QInputMethodEvent::Attribute> &QInputMethodEvent::attributes() const
Gibt die Liste der Attribute zurück, die an den Konstruktor „ QInputMethodEvent “ übergeben wurden. Die Attribute steuern die Darstellung der Preedit-Zeichenkette (die Darstellung von Text außerhalb der Preedit-Zeichenkette wird ausschließlich vom Widget gesteuert).
Siehe auch „ preeditString()“ und „ Attribute “.
const QString &QInputMethodEvent::commitString() const
Gibt den Text zurück, der dem Text des Editor-Widgets hinzugefügt (oder Teile davon ersetzen) soll. Er ist in der Regel das Ergebnis von Eingabeoperationen und muss direkt vor der „preedit“-Zeichenkette in den Text des Widgets eingefügt werden.
Siehe auch setCommitString(), preeditString(), replacementStart() und replacementLength().
const QString &QInputMethodEvent::preeditString() const
Gibt den Text vor der Bearbeitung zurück, d. h. den Text, bevor der Benutzer mit der Bearbeitung begonnen hat.
Siehe auch „ commitString()“ und „ attributes()“.
int QInputMethodEvent::replacementLength() const
Gibt die Anzahl der Zeichen zurück, die in der Vorbearbeitungszeichenfolge ersetzt werden sollen.
Siehe auch „ replacementStart()“ und „ setCommitString()“.
int QInputMethodEvent::replacementStart() const
Gibt die Position zurück, an der Zeichen relativ zum Anfang der Vorbearbeitungszeichenfolge ersetzt werden sollen.
Siehe auch replacementLength() und setCommitString().
void QInputMethodEvent::setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)
Setzt die Commit-Zeichenkette auf „ commitString “.
Die Commit-Zeichenkette ist der Text, der dem Text des Editor-Widgets hinzugefügt werden (oder Teile davon ersetzen) soll. Sie ist in der Regel das Ergebnis der Eingabeoperationen und muss direkt vor der Preedit-Zeichenkette in den Text des Widgets eingefügt werden.
Soll die Commit-Zeichenkette Teile des Textes im Editor ersetzen, gibt ` replaceLength ` die Anzahl der zu ersetzenden Zeichen an. ` replaceFrom ` gibt die Position an, an der Zeichen relativ zum Anfang der Preedit-Zeichenkette ersetzt werden sollen.
Siehe auch commitString(), replacementStart() und replacementLength().
[protected delete] QInputMethodEvent &QInputMethodEvent::operator=(QInputMethodEvent &&)
Weist „ other “ dieser „ QInputMethodEvent “-Instanz zu. Diese Funktion wird gelöscht.
[noexcept protected default] QInputMethodEvent &QInputMethodEvent::operator=(const QInputMethodEvent &other)
other Weist dieser Instanz von „ QInputMethodEvent “ den Wert „ “ zu. “ zu dieser Instanz von „ “ zu.
© 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.