QInputMethodEvent Class
Die Klasse QInputMethodEvent liefert Parameter für Eingabemethodenereignisse. Mehr...
Kopfzeile: | #include <QInputMethodEvent> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
Vererbt: | QEvent |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QInputMethodEvent ist Teil der Ereignis-Klassen.
Öffentliche Typen
class | Attribute |
enum | AttributeType { TextFormat, Cursor, Language, Ruby, Selection } |
Ö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) |
Detaillierte Beschreibung
Eingabemethodenereignisse werden an Widgets gesendet, wenn eine Eingabemethode verwendet wird, um Text in ein Widget einzugeben. Eingabemethoden werden häufig verwendet, um Text für Sprachen mit nicht-lateinischen Alphabeten einzugeben.
Beachten Sie, dass bei der Erstellung von benutzerdefinierten Textbearbeitungs-Widgets das Attribut Qt::WA_InputMethodEnabled window explizit gesetzt werden muss (mit der Funktion QWidget::setAttribute()), um Eingabemethoden-Ereignisse zu empfangen.
Die Ereignisse sind von Interesse für Autoren von Tastatureingabe-Widgets, die in der Lage sein wollen, Sprachen mit komplexer Zeicheneingabe korrekt zu behandeln. Die Texteingabe in solchen Sprachen ist normalerweise ein dreistufiger Prozess:
- Beginn der Komposition
Wenn der Benutzer die erste Taste auf einer Tastatur drückt, wird ein Eingabekontext erstellt. Dieser Eingabekontext enthält eine Zeichenkette mit den eingegebenen Zeichen.
- Zusammensetzen
Bei jedem neuen Tastendruck versucht die Eingabemethode, eine passende Zeichenfolge für den bisher getippten Text zu erstellen, die so genannte Preedit-Zeichenfolge. Solange der Eingabekontext aktiv ist, kann der Benutzer den Cursor nur innerhalb der Zeichenkette bewegen, die zu diesem Eingabekontext gehört.
- Vervollständigen
Irgendwann aktiviert der Benutzer eine Komponente der Benutzeroberfläche (vielleicht mit einer bestimmten Taste), in der er aus einer Reihe von Zeichenfolgen auswählen kann, die dem bisher eingegebenen Text entsprechen. Der Benutzer kann entweder seine Wahl 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 für die korrekte Darstellung des Zwischenergebnisses erforderlich sind. Ein QInputMethodEvent hat zwei Hauptparameter: preeditString() und commitString(). Der Parameter preeditString() gibt die derzeit aktive Pre-Edit-Zeichenkette an. Der commitString()-Parameter gibt einen Text an, der dem Text des Editor-Widgets hinzugefügt werden soll (oder Teile davon ersetzen soll). Er ist normalerweise ein Ergebnis der Eingabeoperationen und muss in den Text des Widgets direkt vor dem Preedit-String eingefügt werden.
Wenn die commitString() Teile des Textes im Editor ersetzen soll, enthält replacementLength() die Anzahl der zu ersetzenden Zeichen. replacementStart() enthält die Position, an der die Zeichen relativ zum Anfang des Preedit-Strings ersetzt werden sollen.
Eine Reihe von Attributen steuert das visuelle Erscheinungsbild der Preedit-Zeichenkette (das visuelle Erscheinungsbild von Text außerhalb der Preedit-Zeichenkette wird nur durch das Widget gesteuert). Das AttributeType enum 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 des Widgets oder Grafikelements abzufragen, müssen Unterklassen auch QWidget::inputMethodQuery() bzw. QGraphicsItem::inputMethodQuery() implementieren.
Beim Empfang eines Eingabemethodenereignisses muss das Textwidget die folgenden Schritte ausführen:
- Wenn das Widget markierten Text hat, sollte der markierte Text entfernt werden.
- Entfernen Sie den Text beginnend bei replacementStart() mit der Länge replacementLength() und ersetzen Sie ihn durch commitString(). Wenn replacementLength() 0 ist, gibt replacementStart() die Einfügeposition für commitString() an.
Bei der Ersetzung wird der Bereich der Preedit-Zeichenkette ignoriert, d.h. eine Ersetzung, die bei -1 mit einer Länge von 2 beginnt, entfernt 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 Undo/Redo implementiert, wird diese Operation zum Undo-Stack hinzugefügt.
- Wenn es keine aktuelle Preedit-Zeichenkette gibt, fügen Sie die preeditString() an der aktuellen Cursorposition ein; andernfalls ersetzen Sie die vorherige preeditString durch die von diesem Ereignis erhaltene.
Wenn das Widget Rückgängig/Wiederherstellen implementiert, sollte preeditString() den Rückgängig/Wiederherstellen-Stapel in keiner Weise beeinflussen.
Das Widget sollte die Liste der Attribute untersuchen, die auf den Pre-Edit-String anzuwenden sind. Es muss zumindest die Attribute TextFormat und Cursor verstehen und sie wie angegeben wiedergeben.
Siehe auch QInputMethod.
Dokumentation der Mitgliedstypen
enum QInputMethodEvent::AttributeType
Konstante | Wert | Beschreibung |
---|---|---|
QInputMethodEvent::TextFormat | 0 | Eine QTextCharFormat für den durch start und length spezifizierten Teil der Preedit-Zeichenkette. value enthält eine QVariant vom Typ QTextFormat, die das Rendering dieses Teils der Preedit-Zeichenkette angibt. Es sollte höchstens ein Format für jeden Teil der Preedit-Zeichenkette geben. Wenn mehrere für ein beliebiges Zeichen in der Zeichenkette angegeben werden, ist das Verhalten undefiniert. Eine konforme Implementierung muss zumindest die Eigenschaften backgroundColor, textColor und fontUnderline des Formats beachten. |
QInputMethodEvent::Cursor | 1 | Falls 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. Wenn die Länge 0 ist, ist der Cursor unsichtbar. Wenn value eine QVariant vom Typ QColor ist, wird diese Farbe für die Darstellung des Cursors verwendet, andernfalls wird die Farbe des umgebenden Textes verwendet. Es sollte höchstens ein Cursor-Attribut pro Ereignis vorhanden sein. Wenn mehrere angegeben werden, ist das Verhalten undefiniert. |
QInputMethodEvent::Language | 2 | Die Variante enthält ein QLocale Objekt, das die Sprache eines bestimmten Teils des Preedit-Strings angibt. Es sollte höchstens eine Sprache für jeden Teil der Preedit-Zeichenkette angegeben werden. Wenn für ein Zeichen in der Zeichenkette mehrere angegeben sind, ist das Verhalten undefiniert. |
QInputMethodEvent::Ruby | 3 | Der Ruby-Text für einen Teil der Preedit-Zeichenkette. Es sollte höchstens ein Ruby-Text für jeden Teil der Preedit-Zeichenkette gesetzt sein. Wenn mehrere für ein beliebiges Zeichen in der Zeichenkette angegeben sind, ist das Verhalten undefiniert. |
QInputMethodEvent::Selection | 4 | Falls gesetzt, sollte der Editiercursor an die angegebene Position im Editor-Textinhalt bewegt werden. Im Gegensatz zu Cursor wirkt dieses Attribut nicht auf den Preedit-Text, sondern auf den umgebenden Text. Der Cursor wird verschoben, nachdem der Commit-String übertragen wurde, und der Preedit-String befindet sich an der neuen Editierposition. Die Startposition gibt die neue Position an und die Längenvariable kann verwendet werden, um eine Auswahl ab diesem Punkt zu treffen. Der Wert ist unbenutzt. |
Siehe auch Attribute.
Dokumentation der Mitgliedsfunktionen
QInputMethodEvent::QInputMethodEvent()
Konstruiert ein Ereignis des Typs QEvent::InputMethod. Die Parameter attributes(), preeditString(), commitString(), replacementStart() und replacementLength() werden mit Standardwerten initialisiert.
Siehe auch setCommitString().
QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
Konstruiert ein Ereignis vom Typ QEvent::InputMethod. Der Preedit-Text wird auf preeditText gesetzt, die Attribute auf attributes.
Die Werte commitString(), replacementStart() und replacementLength() können mit setCommitString() gesetzt werden.
Siehe auch preeditString() und attributes().
const QList<QInputMethodEvent::Attribute> &QInputMethodEvent::attributes() const
Gibt die Liste der Attribute zurück, die an den QInputMethodEvent Konstruktor übergeben wurden. Die Attribute steuern das visuelle Erscheinungsbild der Preedit-Zeichenkette (das visuelle Erscheinungsbild von Text außerhalb der Preedit-Zeichenkette wird nur durch das 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 werden soll (oder Teile davon ersetzen). Er ist normalerweise ein Ergebnis der Eingabeoperationen und muss in den Text des Widgets direkt vor dem Preedit-String 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 begann.
Siehe auch commitString() und attributes().
int QInputMethodEvent::replacementLength() const
Gibt die Anzahl der zu ersetzenden Zeichen in der Preedit-Zeichenkette zurück.
Siehe auch replacementStart() und setCommitString().
int QInputMethodEvent::replacementStart() const
Gibt die Position zurück, an der die Zeichen relativ zum Anfang der Preedit-Zeichenfolge ersetzt werden sollen.
Siehe auch replacementLength() und setCommitString().
void QInputMethodEvent::setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)
Setzt den Commit-String auf commitString.
Der Commit-String ist der Text, der dem Text des Editor-Widgets hinzugefügt werden soll (oder Teile davon ersetzt). Er ist normalerweise ein Ergebnis der Eingabeoperationen und muss in den Text des Widgets direkt vor dem Preedit-String eingefügt werden.
Wenn der Commit-String Teile des Textes im Editor ersetzen soll, gibt replaceLength die Anzahl der zu ersetzenden Zeichen an. replaceFrom gibt die Position an, an der Zeichen relativ zum Anfang des Preedit-Strings ersetzt werden sollen.
Siehe auch commitString(), replacementStart(), und replacementLength().
© 2025 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.