PySide6.QtGui.QInputMethodEvent

class QInputMethodEvent

QInputMethodEvent 类提供了输入法事件的参数。More_

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()不应以任何方式影响撤销/重做堆栈。

    小部件应检查应用于预编辑字符串的属性列表。它必须至少理解TextFormat和Cursor属性,并按照指定进行渲染。

另请参阅

QInputMethod

class AttributeType

常量

描述

QInputMethodEvent.TextFormat

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

QInputMethodEvent.Cursor

如果设置,应在预编辑字符串的起始位置显示一个光标。长度变量决定光标是否可见。如果长度为0,则光标不可见。如果值是QColor类型的QVariant,则此颜色将用于渲染光标,否则将使用周围文本的颜色。每个事件最多应有一个Cursor属性。如果指定了多个,则行为未定义。

QInputMethodEvent.Language

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

QInputMethodEvent.Ruby

预编辑字符串部分的注音文本。每个预编辑字符串部分最多应设置一个注音文本。如果为字符串中的任何字符指定了多个注音文本,则行为未定义。

QInputMethodEvent.Selection

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

另请参阅

属性

__init__()

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

另请参阅

setCommitString()

__init__(arg__1)
Parameters:

arg__1QInputMethodEvent

__init__(preeditText, attributes)
Parameters:
  • preeditText – str

  • attributes – QInputMethodEvent.Attribute 的列表

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

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

__repr__()
Return type:

字符串

attributes()
Return type:

QInputMethodEvent.Attribute 的列表

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

另请参阅

preeditString() 属性

commitString()
Return type:

字符串

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

preeditString()
Return type:

字符串

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

replacementLength()
Return type:

整数

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

replacementStart()
Return type:

整数

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

setCommitString(commitString[, replaceFrom=0[, replaceLength=0]])
Parameters:
  • commitString – str

  • replaceFrom – 整数

  • replaceLength – int

将提交字符串设置为 commitString

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

如果提交字符串应替换编辑器中的部分文本,replaceLength 指定要替换的字符数。replaceFrom 指定从预编辑字符串开始的位置,字符将被替换。

class Attribute

Attribute 类存储了一个输入方法属性。More_

概要

方法

注意

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

详细描述

PySide6.QtGui.QInputMethodEvent.Attribute.type
PySide6.QtGui.QInputMethodEvent.Attribute.start
PySide6.QtGui.QInputMethodEvent.Attribute.length
PySide6.QtGui.QInputMethodEvent.Attribute.value
__init__(typ, s, l)
Parameters:

这是一个重载函数。

构造一个没有值的输入方法属性。type 指定属性的类型,startlength 指定属性的位置。

__init__(typ, s, l, val)
Parameters:

构造一个输入方法属性。type 指定属性的类型,startlength 指定属性的位置,value 指定属性的值。

__ne__(rhs)
Parameters:

rhsAttribute

Return type:

布尔

__eq__(rhs)
Parameters:

rhsAttribute

Return type:

布尔