QInputMethodEvent Class

QInputMethodEvent クラスは、入力メソッド・イベントのパラメータを提供します。詳細...

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

パブリック・タイプ

class Attribute
enum 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
int replacementLength() const
int replacementStart() const
void setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)

詳細説明

入力メソッドイベントは、入力メソッドがウィジェットにテキストを入力するために使われたときに、ウィジェットに送られます。入力メソッドは、ラテン文字以外のアルファベットを持つ言語のテキスト入力に広く使用されています。

カスタムテキスト編集ウィジェットを作成する場合、入力メソッドイベントを受信するために、Qt::WA_InputMethodEnabled window属性を明示的に設定する必要があることに注意してください(QWidget::setAttribute()関数を使用)。

このイベントは、複雑な文字入力を持つ言語を正しく扱えるようにしたいキーボード入力ウィジェットの作者にとって興味深いものです。このような言語でのテキスト入力は、通常3つのステップで行われます:

  1. 入力の開始

    ユーザーがキーボードの最初のキーを押すと、入力コンテキストが作成されます。この入力コンテキストには、入力された文字列が含まれます。

  2. 作曲する

    新しいキーが押されるたびに、入力メソッドはこれまでに入力された文字列に一致する文字列を作成しようとします。入力コンテキストがアクティブになっている間、ユーザーはこの入力コンテキストに属する文字列の中でしかカーソルを動かすことができません。

  3. 完了

    ある時点で、ユーザーは(おそらく特定のキーを使って)ユーザーインターフェイスコンポーネントをアクティブにし、そこで、これまでに入力したテキストに一致する文字列をいくつかの中から選ぶことができます。ユーザーは選択を確定するか、入力をキャンセルすることができます。どちらの場合でも、入力コンテキストは閉じられます。

QInputMethodEventはこれら3つの段階をモデル化し、中間結果を正しくレンダリングするために必要な情報を転送する。QInputMethodEventには、preeditString ()とcommitString ()の2つの主要なパラメータがある。preeditString() パラメータは、現在アクティブな編集前文字列を与えます。commitString() パラメータは、エディタ・ウィジェットのテキストに追加される(または、テキストの一部を置き換える)テキストを指定します。これは通常、入力操作の結果であり、編集前文字列の直前でウィジェットのテキストに挿入されなければなりません。

commitString()がエディタのテキストの一部を置き換える場合、replacementLength()には置き換えられる文字数が入ります。replacementStart() には、編集前文字列の先頭からの相対的な置換位置が入ります。

多くの属性は、編集前文字列の視覚的な外観を制御します(編集前文字列の外側のテキストの視覚的な外観は、ウィジェットによってのみ制御されます)。AttributeType enumは、設定可能な属性を記述しています。

QWidget::inputMethodEvent() やQGraphicsItem::inputMethodEvent() を実装するクラスは、少なくともTextFormatCursor 属性を理解し、尊重しなければなりません。

入力メソッドは、ウィジェットまたはグラフィック・アイテムから特定のプロパティを照会できる必要があるため、サブクラスは、それぞれQWidget::inputMethodQuery() とQGraphicsItem::inputMethodQuery() も実装する必要があります。

入力メソッド・イベントを受け取ると、テキスト・ウィジェットは以下のステップを実行しなければならない:

  1. ウィジェットがテキストを選択している場合、選択されたテキストを削除する。
  2. 長さreplacementLength()のreplacementStart()で始まるテキストを削除し、commitString()で置き換える。replacementLength() が 0 の場合、replacementStart() は、commitString() の挿入位置を示す。

    置換を行う際、編集前文字列の領域は無視されます。したがって、長さ 2 で -1 から始まる置換は、編集前文字列の前の最後の文字と後の最初の文字を削除し、コミット文字列を編集前文字列の直前に挿入します。

    ウィジェットがアンドゥ/リドゥを実装している場合、この操作はアンドゥスタックに追加されます。

  3. 現在の編集前文字列がない場合は、現在のカーソル位置にpreeditString() を挿入します。そうでない場合は、前のpreeditString をこのイベントで受け取ったものに置き換えます。

    ウィジェットがアンドゥ/リドゥを実装している場合、preeditString ()は、アンドゥ/リドゥスタックにいかなる影響も及ぼすべきではない。

    ウィジェットは、編集前の文字列に適用する属性のリストを調べるべきである。少なくともTextFormat と Cursor 属性を理解し、指定されたとおりにレンダリングする必要があります。

QInputMethodも参照してください

メンバ型ドキュメント

enum QInputMethodEvent::AttributeType

定数説明
QInputMethodEvent::TextFormat0開始と長さで指定された編集前文字列の部分のためのQTextCharFormat. value は、編集前文字列のこの部分のレンダリングを指定するQTextFormat 型のQVariant を含んでいます。編集前文字列のすべての部分に対して、最大でも1つの書式があるべきである。文字列内の任意の文字に複数の書式が指定された場合、その動作は未定義となる。適合する実装は、少なくとも書式のbackgroundColor、textColor、fontUnderlineプロパティを尊重しなければならない。
QInputMethodEvent::Cursor1設定されている場合、カーソルは開始位置で編集前文字列の内側に表示されなければなりません。length変数は、カーソルが表示されるかどうかを決定する。長さが0の場合、カーソルは見えない。valueがQVariantQColor )型の場合、この色がカーソルのレンダリングに使用され、そうでない場合は周囲のテキストの色が使用される。Cursor属性は、1つのイベントにつき最大1つでなければなりません。複数指定された場合の動作は未定義です。
QInputMethodEvent::Language2variant は、編集前の文字列のある部分の言語を指定するQLocale オブジェクトを含んでいます。編集前文字列のすべての部分に対して、最大でも1つの言語が設定されるべきです。文字列のどの文字にも複数の言語が指定されている場合、動作は未定義です。
QInputMethodEvent::Ruby3編集前文字列の一部分に対するルビテキスト。再編集前文字列の各部分に対して設定されるルビテキストは、最大でも1つであるべきです。文字列内の任意の文字に対して複数指定された場合の動作は未定義である。
QInputMethodEvent::Selection4設定された場合、編集カーソルはエディタテキスト内容の指定された位置に移動されるはずです。Cursor とは対照的に、この属性は編集前テキストには作用せず、周囲のテキストに作用します。カーソルはコミット文字列がコミットされた後に移動され、編集前の文字列は新しい編集位置に配置されます。開始位置は新しい位置を指定し、長さ変数はその位置から始まる選択範囲を設定するために使用できます。この値は未使用です。

Attributeも参照

メンバ関数ドキュメント

QInputMethodEvent::QInputMethodEvent()

QEvent::InputMethod 型のイベントを構築する。attributes(),preeditString(),commitString(),replacementStart(),replacementLength() はデフォルト値に初期化される。

setCommitString()も参照してください

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

QEvent::InputMethod 型のイベントを構築します。編集前テキストはpreeditText に設定され、属性はattributes に設定されます。

commitString()、replacementStart()、replacementLength() の値は、setCommitString() を使用して設定できます。

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 に設定します。

コミット文字列は、エディタウィジェットのテキストに追加される(または置換される)テキストです。これは通常、入力操作の結果であり、predit 文字列の前に直接ウィジェットのテキストに挿入されなければなりません。

コミット文字列がエディタのテキストの一部を置き換える場合、replaceLength は置き換えられる文字数を指定します。replaceFrom は、編集前文字列の開始位置からの相対的な置き換え位置を指定します。

commitString(),replacementStart(),replacementLength()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。