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, MimeData } |
パブリック関数
| 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) |
保護関数
| QInputMethodEvent(QInputMethodEvent &&) | |
| QInputMethodEvent & | operator=(QInputMethodEvent &&) |
| QInputMethodEvent & | operator=(const QInputMethodEvent &other) |
詳細な説明
入力メソッドイベントは、ウィジェットへのテキスト入力に入力メソッドが使用された際に、そのウィジェットに送信されます。入力メソッドは、ラテン文字以外のアルファベットを使用する言語のテキスト入力に広く利用されています。
カスタムテキスト編集ウィジェットを作成する場合、入力メソッドイベントを受信するには、ウィンドウ属性Qt::WA_InputMethodEnabled を(QWidget::setAttribute()関数を使用して)明示的に設定する必要があることに注意してください。
これらのイベントは、複雑な文字入力を伴う言語を正しく処理したいキーボード入力ウィジェットの作成者にとって重要です。こうした言語でのテキスト入力は、通常、以下の3つのステップで構成されます:
- 入力の開始
ユーザーがキーボードの最初のキーを押すと、入力コンテキストが作成されます。この入力コンテキストには、入力された文字の文字列が含まれます。
- 入力
新しいキーが押されるたびに、入力メソッドは、それまでに打ち込まれたテキストに対応する「プレエディット文字列」と呼ばれる文字列を作成しようとします。入力コンテキストがアクティブな間、ユーザーは、その入力コンテキストに属する文字列内でのみカーソルを移動させることができます。
- 完了
ある時点で、ユーザーは(特定のキーを使用するなどして)ユーザーインターフェースコンポーネントをアクティブにし、それまでに打ち込んだテキストに一致する複数の文字列から選択できるようになります。ユーザーは選択を確定するか、入力をキャンセルすることができます。いずれの場合も、入力コンテキストは閉じられます。
QInputMethodEvent はこれら3つの段階をモデル化し、中間結果を正しくレンダリングするために必要な情報を伝達します。QInputMethodEvent には、preeditString() とcommitString() という2つの主要なパラメータがあります。preeditString() パラメータは、現在アクティブなプレエディット文字列を返します。commitString() パラメータは、エディタウィジェットのテキストに追加される(またはその一部を置き換える)べきテキストを返します。これは通常、入力操作の結果であり、プレエディット文字列の直前にウィジェットのテキストに挿入される必要があります。
commitString() がエディタ内のテキストの一部を置換する場合、replacementLength() には置換される文字数が格納されます。replacementStart() には、プレエディット文字列の先頭からの相対位置として、文字が置換される位置が格納されます。
プレエディット文字列の視覚的な外観は、いくつかの属性によって制御されます(プレエディット文字列外のテキストの視覚的な外観は、ウィジェットのみによって制御されます)。AttributeType 列挙型は、設定可能なさまざまな属性を記述しています。
QWidget::inputMethodEvent() またはQGraphicsItem::inputMethodEvent() を実装するクラスは、少なくともTextFormat およびCursor 属性を理解し、それらを尊重する必要があります。
入力メソッドはウィジェットやグラフィック項目から特定のプロパティを照会できる必要があるため、サブクラスもそれぞれQWidget::inputMethodQuery() およびQGraphicsItem::inputMethodQuery() を実装する必要があります。
入力メソッドからのイベントを受信した際、テキストウィジェットは以下の手順を実行する必要があります。
- ウィジェットに選択されたテキストがある場合、そのテキストを削除します。
- replacementStart() で指定された位置から、replacementLength() で指定された長さのテキストを削除し、commitString() で指定されたテキストに置き換えます。replacementLength() が 0 の場合、replacementStart() はcommitString() の挿入位置を返します。
置換を行う際、preedit文字列の領域は無視されます。したがって、-1から始まり長さが2の置換を行うと、preedit文字列の直前の最後の文字と、その直後の最初の文字が削除され、commit文字列がpreedit文字列の直前に挿入されます。
ウィジェットが元に戻す/やり直し機能を実装している場合、この操作は元に戻すスタックに追加されます。
- 現在の preedit 文字列がない場合は、preeditString() を現在のカーソル位置に挿入します。それ以外の場合は、以前のpreeditString を、このイベントから受け取ったものへと置き換えます。
ウィジェットが元に戻す/やり直しを実装している場合、preeditString() はこの元に戻す/やり直しスタックに一切影響を与えてはなりません。
ウィジェットは、プレエディット文字列に適用する属性のリストを検証する必要があります。少なくともTextFormat およびCursor属性を理解し、指定どおりにレンダリングしなければなりません。
QInputMethodも参照してください 。
メンバ型のドキュメント
enum QInputMethodEvent::AttributeType
| 定数 | 値 | 説明 |
|---|---|---|
QInputMethodEvent::TextFormat | 0 | start および length で指定されたプレエディット文字列の一部に対するQTextCharFormat 。value には、このプレエディット文字列の部分のレンダリングを指定する、QTextFormat 型のQVariant が含まれます。プレエディット文字列の各部分に対して、format は最大1つである必要があります。文字列内のいずれかの文字に対して複数の format が指定された場合、その動作は未定義となります。 準拠する実装は、少なくともformatのbackgroundColor、textColor、およびfontUnderlineプロパティを尊重しなければならない。 |
QInputMethodEvent::Cursor | 1 | 設定されている場合、プレエディット文字列内の位置 start にカーソルが表示される必要があります。変数 length によって、カーソルが表示されるかどうかが決まります。length が 0 の場合、カーソルは非表示になります。value が型QColor の `QVariant ` である場合、この色がカーソルの描画に使用されます。それ以外の場合は、周囲のテキストの色が使用されます。 1つのイベントにつき、Cursor属性は最大1つまで指定できます。複数指定された場合、動作は未定義となります。 |
QInputMethodEvent::Language | 2 | このバリアントには、プレエディット文字列の特定の部分の言語を指定するQLocale オブジェクトが含まれます。プレエディット文字列の各部分に対して設定される言語は、最大1つである必要があります。文字列内の任意の文字に対して複数の言語が指定された場合、動作は未定義となります。 |
QInputMethodEvent::Ruby | 3 | プレエディット文字列の一部に対するルビテキスト。プレエディット文字列の各部分に対して設定されるルビテキストは、最大1つであるべきです。文字列内の任意の文字に対して複数指定された場合、挙動は未定義です。 |
QInputMethodEvent::Selection | 4 | 設定された場合、編集カーソルはエディタテキストの内容内の指定された位置に移動されます。Cursor とは対照的に、この属性はプレエディットテキストではなく、その周囲のテキストに対して作用します。カーソルの移動はコミット文字列がコミットされた後に実行され、プレエディット文字列は新しい編集位置に配置されます。 start 位置は新しい位置を指定し、length 変数を使用してその点から始まる選択範囲を設定できます。この値は使用されません。 |
QInputMethodEvent::MimeData | 5 | 設定されている場合、このバリアントには、コミットされたテキストを表すQMimeData オブジェクトが含まれます。commitString()は、引き続きコミットされたテキストのプレーンテキスト表現を提供します。 |
「Attribute」も参照してください 。
メンバ関数のドキュメント
QInputMethodEvent::QInputMethodEvent()
QEvent::InputMethod 型のイベントを生成します。attributes()、preeditString()、commitString()、replacementStart()、およびreplacementLength()は、デフォルト値で初期化されます。
setCommitString()も参照してください 。
QInputMethodEvent::QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes)
QEvent::InputMethod 型のイベントを生成します。preedit テキストはpreeditText に、属性はattributes に設定されます。
commitString()、replacementStart()、およびreplacementLength() の値は、setCommitString() を使用して設定できます。
preeditString() およびattributes()も参照してください 。
[protected delete] QInputMethodEvent::QInputMethodEvent(QInputMethodEvent &&)
QInputMethodEvent のインスタンスをムーブコンストラクトで生成します。この関数は削除されています。
const QList<QInputMethodEvent::Attribute> &QInputMethodEvent::attributes() const
QInputMethodEvent コンストラクタに渡された属性のリストを返します。これらの属性は、preedit文字列の外観を制御します(preedit文字列以外のテキストの外観は、ウィジェットのみによって制御されます)。
preeditString() およびAttributeも参照してください 。
const QString &QInputMethodEvent::commitString() const
エディタウィジェットのテキストに追加(または一部を置換)すべきテキストを返します。これは通常、入力操作の結果であり、ウィジェットのテキスト内の「preedit」文字列の直前に挿入する必要があります。
setCommitString()、preeditString()、replacementStart()、およびreplacementLength()も参照してください 。
const QString &QInputMethodEvent::preeditString() const
編集前のテキスト、つまりユーザーが編集を開始する前のテキストを返します。
commitString() およびattributes()も参照してください 。
int QInputMethodEvent::replacementLength() const
preedit 文字列内で置換される文字数を返します。
replacementStart() およびsetCommitString()も参照してください 。
int QInputMethodEvent::replacementStart() const
preedit文字列の先頭からの相対位置として、文字が置換される位置を返します。
replacementLength() およびsetCommitString()も参照してください 。
void QInputMethodEvent::setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0)
コミット文字列を「commitString 」に設定します。
コミット文字列とは、エディタウィジェットのテキストに追加される(またはその一部を置き換える)べきテキストのことです。これは通常、入力操作の結果であり、プレエディット文字列の直前にウィジェットのテキストに挿入される必要があります。
コミット文字列がエディタのテキストの一部を置換する場合、replaceLength は置換される文字数を指定します。replaceFrom は、preedit 文字列の先頭からの相対位置で、文字が置換される位置を指定します。
commitString()、replacementStart()、およびreplacementLength()も参照してください 。
[protected delete] QInputMethodEvent &QInputMethodEvent::operator=(QInputMethodEvent &&)
other をこのQInputMethodEvent インスタンスに割り当てます。この関数は削除されます。
[noexcept protected default] QInputMethodEvent &QInputMethodEvent::operator=(const QInputMethodEvent &other)
other をこのQInputMethodEvent インスタンスにコピーして代入します。
© 2026 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.