QInputMethodEvent 类

QInputMethodEvent 类提供了输入方法事件参数。 更多...

头文件 #include <QInputMethodEvent>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承 QEvent

公共类型

属性
枚举AttributeType { TextFormat, Cursor, Language, Ruby, Selection }

公共函数

QInputMethodEvent()
QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
const QList<QInputMethodEvent::Attribute> &attributes() const
const QString &commitString() const
const QString &preeditString() const
intreplacementLength() const
intreplacementStart() const
voidsetCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)

详细描述

输入方法事件是当使用输入方法向小部件输入文本时发送到小部件的。非拉丁字母语言广泛使用输入方法来输入文本。

注意:当创建自定义文本编辑小部件时,必须显式设置(使用 QWidget::setAttribute() 函数)Qt::WA_InputMethodEnabled 窗口属性,以便接收输入方法事件。

这些事件对想要正确处理复杂数字输入语言的键盘输入小部件的作者来说是有趣的。这些语言的文本输入通常是一个三步过程

  1. 开始编写

    当用户按下键盘上的第一个键时,会创建一个输入上下文。这个输入上下文将包含一个已输入字符的字符串。

  2. 编写

    每当按下新的键,输入方法将尝试为已输入的文本创建匹配的字符串,称为预编辑字符串。在输入上下文有效时,用户只能将光标移动到属于该输入上下文的字符串内。

  3. 完成

    在某个时候,用户将激活一个用户界面组件(也许使用特定的键),在这里他们可以选择他们已输入的文本的匹配字符串之一。用户可以确认他们的选择或取消输入;在两种情况下,输入上下文都将关闭。

QInputMethodEvent 模拟这三个阶段,并传递用于正确渲染中间结果的所需信息。一个 QInputMethodEvent 有两个主要参数: preeditString() 和 commitString()。preeditString() 参数提供了当前活动的预编辑字符串。而 commitString() 参数提供了一个将要添加到(或替换编辑器小部件文本的一部分)的文本。这通常是输入操作的产物,需要直接插入到小部件文本的预编辑字符串之前。

如果 commitString() 需要替换编辑器内的文本部分,则 replacementLength() 将包含要替换的字符数。replacementStart() 包含相对于预编辑字符串开始的替换字符的位置。

多个属性控制预编辑字符串的视觉外观(预编辑字符串之外文本的视觉外观只由小部件控制)。AttributeType 枚举描述了可以设置的不同属性。

实现了 QWidget::inputMethodEvent() 或 QGraphicsItem::inputMethodEvent() 的类应至少理解和遵循 TextFormatCursor 属性。

由于输入法需要能够从小部件或图形项查询某些属性,子类必须还实现 QWidget::inputMethodQuery() 和 QGraphicsItem::inputMethodQuery(),分别。

当接收到输入法事件时,文本小部件必须执行以下步骤

  1. 如果小部件有选中文本,则应删除选中文本。
  2. 删除从 replacementStart() 开始长度为 replacementLength() 的文本,并用 commitString 来替换它。如果 replacementLength() 为 0,则 replacementStart() 给出插入 commitString 的插入位置。

    在执行替换时,应忽略预编辑字符串的区域,因此从 -1 开始长度为 2 的替换将删除预编辑字符串之前的最后一个字符和之后的第一个字符,并在预编辑字符串之前直接插入提交字符串。

    如果小部件实现撤销/重做,则此操作将被添加到撤销堆栈中。

  3. 如果没有当前的预编辑字符串,则在当前光标位置插入 preeditString();否则用从事件接收的 preeditString 来替换之前的 preeditString

    如果小部件实现了撤销/重做,则 preeditString() 应以任何方式都不会影响撤销/重做堆栈。

    小部件应检查要应用于预编辑字符串的属性列表。它至少需要理解 TextFormat 和Cursor 属性,并按指定方式渲染它们。

另请参阅:QInputMethod.

成员类型文档

枚举 QInputMethodEvent::AttributeType

常量描述
QInputMethodEvent::TextFormat0一个用于指定起止位置的预编辑字符串部分的QTextCharFormat。值包含一个QVariant,其类型为QTextFormat,用于指定预编辑字符串该部分的渲染方式。预编辑字符串的每个部分应最多只有一个格式。如果为字符串中的任何字符指定了多个格式,其行为是未定义的。符合规定的实现至少必须尊重格式中的backgroundColor、textColor和fontUnderline属性。
QInputMethodEvent::Cursor1如果设置,则在起止位置start的预编辑字符串内应显示光标。长度变量决定光标是否可见。如果长度为0,则光标不可见。如果值是一个类型为QColorQVariant,则将使用此颜色渲染光标,否则将使用周围文本的颜色。每个事件应最多只有一个Cursor属性。如果指定了多个,其行为是未定义的。
QInputMethodEvent::Language2包含指定预编辑字符串部分语言的QLocale对象。预编辑字符串的每个部分应最多有一个语言设置。如果为字符串中的任何字符指定了多个语言,其行为是未定义的。
QInputMethodEvent::Ruby3预编辑字符串部分的Ruby文本。预编辑字符串的每个部分应最多有一个Ruby文本设置。如果为字符串中的任何字符指定了多个Ruby文本,其行为是未定义的。
QInputMethodEvent::Selection4如果设置,则应将编辑光标移动到编辑文本内容中指定的位置。与Cursor属性相比,此属性不作用于预编辑文本,而是作用于 surrounding text。光标将在提交字符串之后移动,并且预编辑字符串将定位在新的编辑位置。起始位置指定新位置,长度变量可用于从该点设置选择。值未使用。

另请参阅 属性

成员函数文档

QInputMethodEvent::QInputMethodEvent()

构建一个类型为QEvent::InputMethod的事件。attributes()、preeditString()、commitString()、replacementStart()和replacementLength()初始化为默认值。

另请参阅 setCommitString

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

构建一个类型为QEvent::InputMethod的事件。预编辑文本设置为preeditText,属性设置为attributes

可以使用setCommitString设置commitString()、replacementStart()和replacementLength()的值。

另请参阅 preeditString()和attributes

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

返回传递给QInputMethodEvent构造函数的属性列表。这些属性控制预编辑字符串的视觉外观(预编辑字符串之外文本的视觉外观由小部件控制)。

参见preeditString()和Attribute

const QString &QInputMethodEvent::commitString() const

返回应添加到(或替换编辑器部件文本的部分)的文本。

参见setCommitString(),preeditString(),replacementStart()和replacementLength

const QString &QInputMethodEvent::preeditString() const

返回预编辑文本,即用户开始编辑前的文本。

参见commitString()和attributes

int QInputMethodEvent::replacementLength() const

返回需要替换的预编辑字符串的字符数。

参见replacementStart()和setCommitString

int QInputMethodEvent::replacementStart() const

返回相对于预编辑字符串开头的替换字符的位置。

参见replacementLength()和setCommitString

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

设置提交字符串为commitString

提交字符串是应添加到(或替换编辑器部件文本的部分)的文本。它通常是输入操作的结果,并需要直接插入到小部件文本中,紧位于预编辑字符串之前。

如果提交字符串应替换编辑器中的文本部分,replaceLength指定需要替换的字符数。replaceFrom指定相对于预编辑字符串开头的替换位置。

参见commitStringreplacementStartreplacementLength

© 2024 Qt公司有限公司。本文档中的贡献属于其各自的版权所有者。本文档根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款进行许可。Qt及其相关标志是芬兰以及全球其他国家的Qt公司有限公司的商标。所有其他商标为其各自所有者的财产。