QInputMethodEvent Class
QInputMethodEvent クラスは、入力メソッド・イベントのパラメータを提供します。詳細...
ヘッダ | #include <QInputMethodEvent> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
継承: | QEvent |
- 継承メンバを含む全メンバのリスト
- QInputMethodEvent はイベントクラスの一部です。
パブリック・タイプ
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つのステップで行われます:
- 入力の開始
ユーザーがキーボードの最初のキーを押すと、入力コンテキストが作成されます。この入力コンテキストには、入力された文字列が含まれます。
- 作曲する
新しいキーが押されるたびに、入力メソッドはこれまでに入力された文字列と一致する文字列を作成しようとします。入力コンテキストがアクティブになっている間、ユーザーはこの入力コンテキストに属する文字列の中でしかカーソルを動かすことができません。
- 完了
ある時点で、ユーザーは(おそらく特定のキーを使って)ユーザーインターフェイスコンポーネントをアクティブにし、そこで、これまでに入力したテキストに一致する文字列をいくつかの中から選ぶことができます。ユーザーは選択を確定するか、入力をキャンセルすることができます。どちらの場合でも、入力コンテキストは閉じられます。
QInputMethodEventはこれら3つの段階をモデル化し、中間結果を正しくレンダリングするために必要な情報を転送する。QInputMethodEventには、preeditString ()とcommitString ()の2つの主要なパラメータがある。preeditString() パラメータは、現在アクティブな編集前文字列を与えます。commitString() パラメータは、エディタ・ウィジェットのテキストに追加される(または、テキストの一部を置き換える)テキストを指定します。これは通常、入力操作の結果であり、編集前文字列の直前でウィジェットのテキストに挿入されなければなりません。
commitString()がエディタのテキストの一部を置き換える場合、replacementLength()には置き換えられる文字数が入ります。replacementStart() には、編集前文字列の先頭からの相対的な置換位置が入ります。
多くの属性は、編集前文字列の視覚的な外観を制御します(編集前文字列の外側のテキストの視覚的な外観は、ウィジェットによってのみ制御されます)。AttributeType enumは、設定可能なさまざまな属性を記述しています。
QWidget::inputMethodEvent() やQGraphicsItem::inputMethodEvent() を実装するクラスは、少なくともTextFormat とCursor 属性を理解し、尊重しなければなりません。
入力メソッドは、ウィジェットまたはグラフィック・アイテムから特定のプロパティを照会できる必要があるため、サブクラスは、それぞれQWidget::inputMethodQuery() とQGraphicsItem::inputMethodQuery() も実装する必要があります。
入力メソッド・イベントを受け取ると、テキスト・ウィジェットは以下のステップを実行しなければならない:
- ウィジェットがテキストを選択している場合、選択されたテキストを削除する。
- 長さreplacementLength()のreplacementStart()で始まるテキストを削除し、commitString()で置き換える。replacementLength() が 0 の場合、replacementStart() はcommitString() の挿入位置を示す。
置換を行う際、編集前文字列の領域は無視されます。したがって、長さ 2 で -1 から始まる置換は、編集前文字列の前の最後の文字と後の最初の文字を削除し、コミット文字列を編集前文字列の直前に挿入します。
ウィジェットがアンドゥ/リドゥを実装している場合、この操作はアンドゥスタックに追加されます。
- 現在の編集前文字列がない場合は、現在のカーソル位置にpreeditString() を挿入します。そうでない場合は、前のpreeditString をこのイベントで受け取ったものに置き換えます。
ウィジェットがアンドゥ/リドゥを実装している場合、preeditString ()は、アンドゥ/リドゥスタックにいかなる影響も及ぼすべきではない。
ウィジェットは、編集前の文字列に適用する属性のリストを調べるべきである。少なくともTextFormat と Cursor 属性を理解し、指定された通りにレンダリングする必要があります。
QInputMethodも参照してください 。
メンバ型ドキュメント
enum QInputMethodEvent::AttributeType
定数 | 値 | 説明 |
---|---|---|
QInputMethodEvent::TextFormat | 0 | QVariant startとlengthで指定された編集前文字列の部分のためのQTextCharFormat 。 valueは、編集前文字列のこの部分のレンダリングを指定するQTextFormat 。編集前文字列のすべての部分に対して、最大でも1つの書式があるべきである。文字列内の任意の文字に複数の書式が指定された場合、その動作は未定義となる。適合する実装は、少なくとも書式のbackgroundColor、textColor、fontUnderlineプロパティを尊重しなければならない。 |
QInputMethodEvent::Cursor | 1 | 設定されている場合、カーソルは開始位置で編集前文字列の内側に表示されなければなりません。length変数は、カーソルが表示されるかどうかを決定する。長さが0の場合、カーソルは見えない。valueがQColor 型のQVariant の場合、この色がカーソルのレンダリングに使用され、そうでない場合は周囲のテキストの色が使用される。Cursor属性は、1つのイベントにつき最大1つでなければなりません。複数指定された場合の動作は未定義です。 |
QInputMethodEvent::Language | 2 | variant は、編集前の文字列のある部分の言語を指定するQLocale オブジェクトを含んでいます。編集前文字列のすべての部分に対して、最大でも1つの言語が設定されるべきです。文字列のどの文字にも複数の言語が指定されている場合、動作は未定義です。 |
QInputMethodEvent::Ruby | 3 | 編集前文字列の一部分に対するルビテキスト。再編集前文字列の各部分に対して設定されるルビテキストは、最大でも1つであるべきです。文字列中の任意の文字に対して複数指定された場合の動作は未定義である。 |
QInputMethodEvent::Selection | 4 | 設定された場合、編集カーソルはエディタテキスト内容の指定された位置に移動されるはずです。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
エディタウィジェットのテキストに追加される(または置換される)テキストを返します。これは通常、入力操作の結果であり、ウィジェットのテキストに preedit 文字列の直前に挿入されなければなりません。
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()も参照 。
© 2025 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.