En esta página

QInputMethodEvent Class

La clase QInputMethodEvent proporciona parámetros para eventos de métodos de entrada. Más...

Cabecera: #include <QInputMethodEvent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Hereda: QEvent

Tipos Públicos

class Attribute
enum AttributeType { TextFormat, Cursor, Language, Ruby, Selection, MimeData }

Funciones Públicas

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)

Descripción Detallada

Los eventos de método de entrada se envían a los widgets cuando se utiliza un método de entrada para introducir texto en un widget. Los métodos de entrada son muy utilizados para introducir texto en idiomas con alfabetos no latinos.

Tenga en cuenta que al crear widgets de edición de texto personalizados, el atributo de ventana Qt::WA_InputMethodEnabled debe establecerse explícitamente (utilizando la función QWidget::setAttribute()) para poder recibir eventos de método de entrada.

Estos eventos son de interés para los autores de widgets de entrada de teclado que deseen manejar correctamente idiomas con entrada de caracteres compleja. La introducción de texto en dichos idiomas suele ser un proceso de tres pasos:

  1. Inicio de la composición

    Cuando el usuario pulsa la primera tecla de un teclado, se crea un contexto de entrada. Este contexto de entrada contendrá una cadena con los caracteres tecleados.

  2. Composición

    Con cada nueva tecla pulsada, el método de entrada intentará crear una cadena coincidente con el texto tecleado hasta el momento, denominada cadena de preedición. Mientras el contexto de entrada esté activo, el usuario sólo podrá mover el cursor dentro de la cadena perteneciente a este contexto de entrada.

  3. Completar

    En algún momento, el usuario activará un componente de la interfaz de usuario (quizás utilizando una tecla concreta) donde podrá elegir entre una serie de cadenas que coincidan con el texto que ha escrito hasta el momento. El usuario puede confirmar su elección o cancelar la entrada; en cualquier caso, el contexto de entrada se cerrará.

QInputMethodEvent modela estas tres etapas, y transfiere la información necesaria para renderizar correctamente el resultado intermedio. Un QInputMethodEvent tiene dos parámetros principales: preeditString() y commitString(). El parámetro preeditString() da la cadena de preedición actualmente activa. El parámetro commitString() da un texto que debería añadirse (o reemplazar partes de) el texto del widget del editor. Normalmente es el resultado de las operaciones de entrada y debe insertarse en el texto del widget directamente antes de la cadena de preedición.

Si commitString() debe reemplazar partes del texto del editor, replacementLength() contendrá el número de caracteres a reemplazar. replacementStart() contiene la posición en la que los caracteres deben ser reemplazados en relación con el inicio de la cadena preedit.

Una serie de atributos controlan el aspecto visual de la cadena de preedición (el aspecto visual del texto fuera de la cadena de preedición sólo lo controla el widget). El enum AttributeType describe los diferentes atributos que se pueden establecer.

Una clase que implemente QWidget::inputMethodEvent() o QGraphicsItem::inputMethodEvent() debería al menos entender y respetar los atributos TextFormat y Cursor.

Dado que los métodos de entrada deben poder consultar ciertas propiedades del widget o del elemento gráfico, las subclases también deben implementar QWidget::inputMethodQuery() y QGraphicsItem::inputMethodQuery(), respectivamente.

Al recibir un evento de método de entrada, el widget de texto tiene que realizar los siguientes pasos:

  1. Si el widget tiene texto seleccionado, el texto seleccionado debe ser eliminado.
  2. Elimina el texto que empieza en replacementStart() con la longitud replacementLength() y lo sustituye por el commitString(). Si replacementLength() es 0, replacementStart() da la posición de inserción para commitString().

    Al hacer el reemplazo se ignora el área de la cadena de preedición, por lo que un reemplazo que comience en -1 con una longitud de 2 eliminará el último carácter antes de la cadena de preedición y el primer carácter después, e insertará la cadena de confirmación directamente antes de la cadena de preedición.

    Si el widget implementa deshacer/rehacer, esta operación se añade a la pila de deshacer.

  3. Si no hay ninguna cadena de preedición actual, inserta el preeditString() en la posición actual del cursor; en caso contrario, reemplaza el preeditString anterior por el recibido de este evento.

    Si el widget implementa deshacer/rehacer, preeditString() no debería influir de ninguna manera en la pila de deshacer/rehacer.

    El widget debe examinar la lista de atributos a aplicar a la cadena preeditada. Tiene que entender al menos los atributos TextFormat y Cursor y renderizarlos como se especifique.

Véase también QInputMethod.

Documentación de tipos de miembros

enum QInputMethodEvent::AttributeType

ConstanteValorDescripción
QInputMethodEvent::TextFormat0Un QTextCharFormat para la parte de la cadena de preedición especificada por start y length. value contiene un QVariant de tipo QTextFormat que especifica la representación de esta parte de la cadena de preedición. Debe haber como máximo un formato para cada parte de la cadena preeditada. Si se especifican varios para cualquier carácter de la cadena, el comportamiento es indefinido. Una implementación conforme debe respetar al menos las propiedades backgroundColor, textColor y fontUnderline del formato.
QInputMethodEvent::Cursor1Si se establece, debe mostrarse un cursor dentro de la cadena de preedición en la posición de inicio. La variable length determina si el cursor es visible o no. Si la longitud es 0 el cursor es invisible. Si el valor es un QVariant de tipo QColor este color se utilizará para representar el cursor, de lo contrario se utilizará el color del texto circundante. Debe haber como máximo un atributo Cursor por evento. Si se especifican varios, el comportamiento es indefinido.
QInputMethodEvent::Language2La variante contiene un objeto QLocale que especifica el idioma de cierta parte de la cadena de preedición. Debe haber como máximo un idioma establecido para cada parte de la cadena de preedición. Si se especifican varios para algún carácter de la cadena, el comportamiento es indefinido.
QInputMethodEvent::Ruby3El texto ruby para una parte de la cadena preeditada. Debe haber como máximo un conjunto de texto ruby para cada parte de la cadena preeditada. Si se especifican varios para cualquier carácter de la cadena, el comportamiento es indefinido.
QInputMethodEvent::Selection4Si se establece, el cursor de edición debe moverse a la posición especificada en el contenido del texto del editor. A diferencia de Cursor, este atributo no funciona sobre el texto de preedición, sino sobre el texto circundante. El cursor se moverá después de que la cadena de confirmación haya sido confirmada, y la cadena de preedición se situará en la nueva posición de edición. La posición de inicio especifica la nueva posición y la variable de longitud se puede utilizar para establecer una selección a partir de ese punto. El valor no se utiliza.
QInputMethodEvent::MimeData5Si se establece, la variante contiene un objeto QMimeData que representa el texto comprometido. commitString () sigue proporcionando la representación en texto plano del texto comprometido.

Véase también Attribute.

Documentación de las funciones miembro

QInputMethodEvent::QInputMethodEvent()

Construye un evento de tipo QEvent::InputMethod. Los campos attributes(), preeditString(), commitString(), replacementStart(), y replacementLength() se inicializan con los valores por defecto.

Véase también setCommitString().

QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)

Construye un evento de tipo QEvent::InputMethod. El texto de preedición se establece en preeditText, los atributos en attributes.

Los valores commitString(), replacementStart(), y replacementLength() pueden establecerse usando setCommitString().

Véase también preeditString() y attributes().

const QList<QInputMethodEvent::Attribute> &QInputMethodEvent::attributes() const

Devuelve la lista de atributos pasados al constructor de QInputMethodEvent. Los atributos controlan el aspecto visual de la cadena de preedición (el aspecto visual del texto fuera de la cadena de preedición sólo lo controla el widget).

Véase también preeditString() y Attribute.

const QString &QInputMethodEvent::commitString() const

Devuelve el texto que debería añadirse al texto del widget del editor (o reemplazar partes del mismo). Normalmente es el resultado de las operaciones de entrada y debe insertarse en el texto del widget directamente antes de la cadena preedit.

Véase también setCommitString(), preeditString(), replacementStart(), y replacementLength().

const QString &QInputMethodEvent::preeditString() const

Devuelve el texto anterior a la edición, es decir, el texto antes de que el usuario empezara a editarlo.

Véase también commitString() y attributes().

int QInputMethodEvent::replacementLength() const

Devuelve el número de caracteres a reemplazar en la cadena preeditada.

Véase también replacementStart() y setCommitString().

int QInputMethodEvent::replacementStart() const

Devuelve la posición en la que deben reemplazarse los caracteres respecto al inicio de la cadena preeditada.

Véase también replacementLength() y setCommitString().

void QInputMethodEvent::setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)

Establece la cadena de confirmación en commitString.

La cadena de confirmación es el texto que debe añadirse al texto del widget del editor (o reemplazar partes del mismo). Normalmente es el resultado de las operaciones de entrada y debe insertarse en el texto del widget directamente antes de la cadena de preedición.

Si la cadena de confirmación debe reemplazar partes del texto del editor, replaceLength especifica el número de caracteres que deben reemplazarse. replaceFrom especifica la posición en la que deben reemplazarse los caracteres con respecto al inicio de la cadena de preedición.

Véase también commitString(), replacementStart() y replacementLength().

© 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.