class QInputMethodEvent#

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

Inheritance diagram of PySide6.QtGui.QInputMethodEvent

概要#

方法#

注意

本文档可能包含从C++到Python自动翻译的片段。我们始终欢迎对摘录翻译的贡献。如果您发现翻译有问题,也可以通过在https://bugreports.qt.io/projects/PYSIDE上创建工单来让我们知道。

详细描述#

当使用输入方法将文本输入到小部件时,会向小部件发送输入方法事件。对于使用非拉丁字母的语言,输入方法被广泛用于输入文本。

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

对于想要正确处理具有复杂字符输入的语言的键盘输入小部件的作者来说,这些事件非常有用途。在这种语言中的文本输入通常是一个三步过程

  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 和光标属性,并按要求渲染它们。

另请参阅

QInputMethod

class AttributeType#

常量

描述

QInputMethodEvent.TextFormat

一个 QTextCharFormat 用于由开始和长度指定的预编辑字符串的部分。值包含一个类型为 QTextFormat 的 QVariant,指定预编辑字符串这部分的处理。每个预编辑字符串部分最多只能有一个格式。如果为字符串中的任何字符指定了多个格式,则行为未定义。一个符合规定的实现必须至少尊重格式的 backgroundColor、textColor 和 fontUnderline 属性。

QInputMethodEvent.Cursor

如果设置,应在预编辑串中显示位置 start 处的光标。长度变量确定光标是否可见。如果长度为 0,光标将不可见。如果值为类型为 QColor 的 QVariant,则将使用此颜色进行光标绘制,否则使用周围文本的颜色。每个事件中最多只能有一个 Cursor 属性。如果指定了多个,则行为未定义。

QInputMethodEvent 语言

变体包含指定预编辑串某个部分语言的 QLocale 对象。预编辑串的每个部分最多只能设置一种语言。如果为串中的任何字符指定了多个,则行为未定义。

QInputMethodEvent 锦注

预编辑串某部分的山茶注文。预编辑串的每个部分最多只能设置一种山茶注文。如果为串中的任何字符指定了多个,则行为未定义。

QInputMethodEvent 选取

如果设置,应将编辑光标移至编辑器文本内容中指定的位置。与 Cursor 不同,此属性不作用于预编辑文本,而作用于周围文本。光标将在提交字符串提交后移动,预编辑串将位于新的编辑位置。起始位置指定了新的位置,长度变量可用于从此点设置选取。值未使用。

另请参阅

属性

__init__()#

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

另请参阅

setCommitString()

__init__(arg__1)
参数:

arg__1

QInputMethodEvent
参数:
  • __init__(preeditText, attributes)

  • preeditText – str

attributes – .列表 of QInputMethodEvent.Attribute

可以通过使用 setCommitString() 方法来设置 commitString()replacementStart() ,和 replacementLength() 的值。

__repr__()#
返回类型:

对象

attributes()#
返回类型:

属性列表:

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

另请参阅

preeditString() Attribute

commitString()#
返回类型:

字符串

返回应该添加到(或替换编辑小部件的文本的部分)的文本。它通常是输入操作的结果,并且必须直接插入到小部件文本中,位于预编辑字符串之前。

preeditString()#
返回类型:

字符串

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

replacementLength()#
返回类型:

整数

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

replacementStart()#
返回类型:

整数

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

setCommitString(commitString[, replaceFrom=0[, replaceLength=0]])#
参数:
  • commitString - 字符串

  • replaceFrom - 整数

  • replaceLength - 整数

将提交字符串设置为 commitString

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

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