QCompleter Class
QCompleter クラスは、アイテムモデルに基づいた補完を提供します。詳細...
ヘッダー | #include <QCompleter> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
継承: | QObject |
パブリックな型
enum | CompletionMode { PopupCompletion, InlineCompletion, UnfilteredPopupCompletion } |
enum | ModelSorting { UnsortedModel, CaseSensitivelySortedModel, CaseInsensitivelySortedModel } |
プロパティ
|
|
公共機能
QCompleter(QObject *parent = nullptr) | |
QCompleter(QAbstractItemModel *model, QObject *parent = nullptr) | |
QCompleter(const QStringList &list, QObject *parent = nullptr) | |
virtual | ~QCompleter() override |
Qt::CaseSensitivity | caseSensitivity() const |
int | completionColumn() const |
int | completionCount() const |
QCompleter::CompletionMode | completionMode() const |
QAbstractItemModel * | completionModel() const |
QString | completionPrefix() const |
int | completionRole() const |
QString | currentCompletion() const |
QModelIndex | currentIndex() const |
int | currentRow() const |
Qt::MatchFlags | filterMode() const |
int | maxVisibleItems() const |
QAbstractItemModel * | model() const |
QCompleter::ModelSorting | modelSorting() const |
virtual QString | pathFromIndex(const QModelIndex &index) const |
QAbstractItemView * | popup() const |
void | setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) |
void | setCompletionColumn(int column) |
void | setCompletionMode(QCompleter::CompletionMode mode) |
void | setCompletionRole(int role) |
bool | setCurrentRow(int row) |
void | setFilterMode(Qt::MatchFlags filterMode) |
void | setMaxVisibleItems(int maxItems) |
void | setModel(QAbstractItemModel *model) |
void | setModelSorting(QCompleter::ModelSorting sorting) |
void | setPopup(QAbstractItemView *popup) |
void | setWidget(QWidget *widget) |
virtual QStringList | splitPath(const QString &path) const |
QWidget * | widget() const |
bool | wrapAround() const |
パブリックスロット
void | complete(const QRect &rect = QRect()) |
void | setCompletionPrefix(const QString &prefix) |
void | setWrapAround(bool wrap) |
シグナル
void | activated(const QModelIndex &index) |
void | activated(const QString &text) |
void | highlighted(const QModelIndex &index) |
void | highlighted(const QString &text) |
再実装されたプロテクト関数
virtual bool | event(QEvent *ev) override |
virtual bool | eventFilter(QObject *o, QEvent *e) override |
詳細説明
QCompleter を使って、QLineEdit やQComboBox などの Qt ウィジェットで自動補完を行うことができます。ユーザーが単語の入力を開始すると、QCompleter は単語リストに基づいて、その単語を補完する可能性のある方法を提案します。単語リストはQAbstractItemModel として提供されます (単語リストが静的な単純なアプリケーションでは、QCompleter のコンストラクタにQStringList を渡すことができます)。
基本的な使い方
QCompleter は通常、QLineEdit またはQComboBox とともに使用します。たとえば、QLineEdit の単純な単語リストから自動補完を行う方法を示します:
QStringList wordList; wordList << "alpha" << "omega" << "omicron" << "zeta"; QLineEdit *lineEdit = new QLineEdit(this); QCompleter *completer = new QCompleter(wordList, this); completer->setCaseSensitivity(Qt::CaseInsensitive); lineEdit->setCompleter(completer);
QFileSystemModel を使って、ファイル名の自動補完を行うことができます。例えば
QCompleter *completer = new QCompleter(this); completer->setModel(new QFileSystemModel(completer)); lineEdit->setCompleter(completer);
QCompleter が操作するモデルを設定するには、setModel() を呼び出します。デフォルトでは、QCompleter はcompletion prefix (つまり、ユーザーが入力を開始した単語) と、モデルのカラム 0 に保存されているQt::EditRole データの大文字小文字を区別して照合を試みます。これは、setCompletionRole()、setCompletionColumn()、setCaseSensitivity() を使用して変更できます。
モデルが補完に使用される列とロールでソートされている場合、QCompleter::CaseSensitivelySortedModel またはQCompleter::CaseInsensitivelySortedModel を引数としてsetModelSorting() を呼び出すことができます。大規模なモデルの場合、QCompleterは線形探索の代わりにバイナリ探索を使用できるため、これは大幅な性能向上につながります。バイナリサーチは、filterMode がQt::MatchStartsWith の場合にのみ機能します。
モデルは、list model 、table model 、またはtree model 。ツリー・モデルでの補完は少し複雑で、以下のHandling Tree Models のセクションで説明します。
completionMode() は、ユーザーに補完を提供するために使用されるモードを決定します。
補完の繰り返し
ひとつの候補文字列を取得するには、補完が必要なテキストを指定してsetCompletionPrefix() をコールし、currentCompletion() をコールする。以下のように、補完候補を繰り返し検索することができます:
for(inti= 0; completer->setCurrentRow(i); i++) qDebug() << completer->currentCompletion() << " is match number " << i;
completionCount() は、現在の接頭辞の総完了数を返します。completionCount() はモデル全体をスキャンする必要があるので、可能な限り避けるべきです。
補完モデル
completionModel() は、現在のプレフィックスに対応するすべての補完候補を含むリストモデルを返します。このモデルを使用して、カスタムビューに現在の補完候補を表示することができます。setCompletionPrefix() をコールすると、補完モデルは自動的にリフレッシュされます。
ツリーモデルの処理
QCompleter はツリーモデルで補完を探すことができます。これは、任意のアイテム(またはサブアイテム、サブサブアイテム)が、アイテムへのパスを指定することで文字列として一義的に表現できることを前提としています。そして、補完は1レベルずつ実行される。
ユーザーがファイルシステムのパスを入力する例を見てみよう。モデルは(階層的な)QFileSystemModel です。補完はパスの各要素に対して行われます。たとえば、現在のテキストがC:\Wind
の場合、QCompleter は現在のパス要素を補完するためにWindows
を提案するかもしれません。同様に、 カ レ ン ト テ キ ス ト がC:\Windows\Sy
の場合、 QCompleter はSystem
を提案するかもしれません。
このような補完を行うには、QCompleter がパスを分割して、各レベルでマッチする文字列のリストにできる必要があります。C:\Windows\Sy
の場合、"C:"、"Windows"、"Sy" のように分割する必要があります。splitPath() のデフォルト実装では、モデルがQFileSystemModel の場合、QDir::separator() を使用してcompletionPrefix を分割します。
QCompleter が補完を提供するには、インデックスからのパスを知る必要があります。これはpathFromIndex() で提供されます。デフォルトの実装であるpathFromIndex() は、リスト・モデルの場合はedit role のデータを返し、モードがQFileSystemModel の場合は絶対ファイル・パスを返します。
QAbstractItemModel 、QLineEdit 、QComboBox 、およびCompleter Exampleも参照 。
メンバ型ドキュメント
enum QCompleter::CompletionMode
この列挙型は、補完がどのようにユーザーに提供されるかを指定します。
定数 | 値 | 説明 |
---|---|---|
QCompleter::PopupCompletion | 0 | 現在の補完結果はポップアップウィンドウに表示されます。 |
QCompleter::InlineCompletion | 2 | 補完はインラインで表示されます (選択されたテキストとして)。 |
QCompleter::UnfilteredPopupCompletion | 1 | 可能性のあるすべての補完候補がポップアップウィンドウに表示され、最も可能性の高い候補が現在のものとして表示されます。 |
setCompletionMode()も参照してください 。
enum QCompleter::ModelSorting
この列挙型は、モデルのアイテムがどのようにソートされるかを指定する。
定数 | 値 | 説明 |
---|---|---|
QCompleter::UnsortedModel | 0 | モデルはソートされていません。 |
QCompleter::CaseSensitivelySortedModel | 1 | モデルは大文字小文字を区別してソートされます。 |
QCompleter::CaseInsensitivelySortedModel | 2 | モデルは大文字小文字を区別せずにソートされる。 |
setModelSorting()も参照 。
プロパティの説明
caseSensitivity : Qt::CaseSensitivity
このプロパティは、マッチングの大文字と小文字の区別を保持します。
デフォルト値はQt::CaseSensitive
です。
アクセス関数:
Qt::CaseSensitivity | caseSensitivity() const |
void | setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) |
completionColumn,completionRole,modelSorting,filterModeも参照してください 。
completionColumn : int
このプロパティは、補完が検索されるモデル内の列を保持する。
popup() がQListView の場合、このカラムが表示されるように自動的に設定されます。
デフォルトでは、一致列は 0 です。
アクセス関数:
int | completionColumn() const |
void | setCompletionColumn(int column) |
completionRole およびcaseSensitivityも参照してください 。
completionMode : CompletionMode
ユーザーにどのように補完を提供するか
デフォルト値はQCompleter::PopupCompletion 。
アクセス関数:
QCompleter::CompletionMode | completionMode() const |
void | setCompletionMode(QCompleter::CompletionMode mode) |
completionPrefix : QString
このプロパティは、補完を提供するために使用される補完接頭辞を保持する。
completionModel() は、prefix にマッチする可能性のあるリストを反映するように更新されます。
アクセス関数:
QString | completionPrefix() const |
void | setCompletionPrefix(const QString &prefix) |
completionRole : int
このプロパティは、マッチングのためにアイテムの内容を照会するために使用されるアイテムのロールを保持します。
デフォルトのロールはQt::EditRole です。
アクセス関数:
int | completionRole() const |
void | setCompletionRole(int role) |
completionColumn およびcaseSensitivityも参照してください 。
filterMode : Qt::MatchFlags
このプロパティは、フィルタリングの実行方法を制御する。
filterMode をQt::MatchStartsWith に設定すると、入力された文字で始まるエントリのみが表示されます。Qt::MatchContains は入力された文字を含むエントリを表示し、Qt::MatchEndsWith は入力された文字で終わるエントリを表示します。
filterModeを他のQt::MatchFlag に設定すると警告が表示され、何も実行されない。このため、Qt::MatchCaseSensitive
フラグは何の効果もありません。大文字と小文字の区別を制御するには、caseSensitivity プロパティを使用します。
デフォルト・モードはQt::MatchStartsWith です。
関数にアクセスします:
Qt::MatchFlags | filterMode() const |
void | setFilterMode(Qt::MatchFlags filterMode) |
caseSensitivityも参照してください 。
maxVisibleItems : int
このプロパティは、コンプリーターの画面上で許容される最大サイズを保持します。
デフォルトでは、このプロパティの値は 7 です。
アクセス関数:
int | maxVisibleItems() const |
void | setMaxVisibleItems(int maxItems) |
modelSorting : ModelSorting
このプロパティは、モデルのソート方法を保持します。
デフォルトでは、補完を提供するモデル内のアイテムの順序は仮定されません。
モデルのcompletionColumn() とcompletionRole() のデータが昇順にソートされている場合、このプロパティをCaseSensitivelySortedModel またはCaseInsensitivelySortedModel に設定することができます。大規模なモデルの場合、コンプリーター・オブジェクトは線形探索アルゴリズムの代わりにバイナリ探索アルゴリズムを使用できるため、これは大幅なパフォーマンスの向上につながります。
モデルのソート順(昇順または降順)は、モデルの内容を検査することによって動的に決定されます。
注意:コンプリーターのcaseSensitivity が、モデルのソート時に使用される大文字小文字の区別と異なる場合、上記のパフォーマンス向上は起こりません。
アクセス関数:
QCompleter::ModelSorting | modelSorting() const |
void | setModelSorting(QCompleter::ModelSorting sorting) |
setCaseSensitivity() およびQCompleter::ModelSortingも参照のこと 。
wrapAround : bool
このプロパティは、アイテムをナビゲートする際の補完の折り返しを保持します。
デフォルトはtrueです。
関数にアクセスします:
bool | wrapAround() const |
void | setWrapAround(bool wrap) |
メンバー関数ドキュメント
QCompleter::QCompleter(QObject *parent = nullptr)
与えられたparent でコンプリターオブジェクトを構築する。
QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = nullptr)
指定されたmodel からの補完を提供する、与えられたparent を持つコンプリーターオブジェクトを構築します。
QCompleter::QCompleter(const QStringList &list, QObject *parent = nullptr)
指定されたlist を補完候補のソースとして使用する、指定されたparent を持つ QCompleter オブジェクトを構築します。
[override virtual noexcept]
QCompleter::~QCompleter()
completerオブジェクトを破棄する。
[signal]
void QCompleter::activated(const QModelIndex &index)
このシグナルは、popup()内の項目がユーザーによってアクティブにされたときに送信される。(クリックするかリターンを押すことによって)。completionModel() 内の項目のindex が指定されます。
注意:このクラスでは、シグナルactivatedはオーバーロードされています。関数ポインタ構文を使用してこのシグナルに接続するために、Qtはこの例に示すように関数ポインタを取得する便利なヘルパーを提供しています:
connect(completer, QOverload<const QModelIndex &>::of(&QCompleter::activated), [=](const QModelIndex &index){ /* ... */ });
[signal]
void QCompleter::activated(const QString &text)
このシグナルは、popup()内のアイテムがユーザーによって(クリックしたりリターンを押したりして)アクティブにされたときに送られる。アイテムのtext 。
注意:このクラスでは、シグナルactivatedはオーバーロードされています。関数ポインタ構文を使用してこのシグナルに接続するために、Qt はこの例に示すように関数ポインタを取得する便利なヘルパーを提供しています:
connect(completer, QOverload<const QString &>::of(&QCompleter::activated), [=](const QString &text){ /* ... */ });
[slot]
void QCompleter::complete(const QRect &rect = QRect())
QCompleter::PopupCompletion および QCompletion::UnfilteredPopupCompletion モードでは、この関数を呼び出すと、現在の補完内容を表示するポップアップが表示されます。デフォルトでは、rect が指定されていない場合、ポップアップはwidget() の下部に表示されます。rect が指定された場合、ポップアップは矩形の左端に表示されます。
QCompleter::InlineCompletion モードの場合、highlighted() シグナルが現在の完了とともに発生する。
int QCompleter::completionCount() const
現在のプレフィックスの完了数を返します。項目数の多いソートされていないモデルの場合、これは高くつく可能性があります。setCurrentRow() やcurrentCompletion() を使用して、すべての完了を繰り返し処理します。
QAbstractItemModel *QCompleter::completionModel() const
補完モデルを返します。補完モデルは読み込み専用のリストモデルで、 現在の補完プレフィックスにマッチする可能性のあるものをすべて含みます。補完モデルは、現在の補完を反映するように自動更新されます。
注意: この関数の返り値は、純粋に一般性を保つためにQAbstractItemModel と定義されています。実際に返されるモデルの種類はQAbstractProxyModel のサブクラスのインスタンスです。
completionPrefix およびmodel()も参照して ください。
QString QCompleter::currentCompletion() const
現在の補完文字列を返す。これにはcompletionPrefix が含まれる。setCurrentRow() と一緒に使用すると、すべてのマッチを繰り返し処理することができる。
setCurrentRow() およびcurrentIndex()も参照 。
QModelIndex QCompleter::currentIndex() const
completionModel() の現在の補完のモデル・インデックスを返す。
setCurrentRow()、currentCompletion() およびmodel()も参照 。
int QCompleter::currentRow() const
現在の行を返します。
setCurrentRow()も参照 。
[override virtual protected]
bool QCompleter::event(QEvent *ev)
再インプリメント:QObject::event(QEvent *e).
[override virtual protected]
bool QCompleter::eventFilter(QObject *o, QEvent *e)
再インプリメント:QObject::eventFilter(QObject *watched, QEvent *event)。
[signal]
void QCompleter::highlighted(const QModelIndex &index)
このシグナルは、popup() 内の項目がユーザーによってハイライトされたときに送られる。また、completionMode() がQCompleter::InlineCompletion に設定された状態でcomplete() が呼び出された場合にも送られます。completionModel() 内のアイテムのindex が指定された場合にも送られます。
注:シグナルhighlightedは、このクラスでオーバーロードされています。関数ポインタ構文を使用してこのシグナルに接続するために、Qtはこの例に示すように関数ポインタを取得する便利なヘルパーを提供します:
connect(completer, QOverload<const QModelIndex &>::of(&QCompleter::highlighted), [=](const QModelIndex &index){ /* ... */ });
[signal]
void QCompleter::highlighted(const QString &text)
このシグナルは、popup()内の項目がユーザーによってハイライトされたときに送られる。また、completionMode() がQCompleter::InlineCompletion に設定された状態でcomplete() が呼び出された場合にも送られます。アイテムのtext が指定されます。
注:このクラスでは、シグナルhighlightedはオーバーロードされています。関数ポインタ構文を使用してこのシグナルに接続するために、Qtはこの例に示すように関数ポインタを取得する便利なヘルパーを提供します:
connect(completer, QOverload<const QString &>::of(&QCompleter::highlighted), [=](const QString &text){ /* ... */ });
QAbstractItemModel *QCompleter::model() const
補完文字列を提供するモデルを返します。
setModel() およびcompletionModel()も参照 ください。
[virtual]
QString QCompleter::pathFromIndex(const QModelIndex &index) const
与えられたindex のパスを返します。コンプリーターオブジェクトは、これを使用して、基礎となるモデルから補完テキストを取得します。
デフォルトの実装では、リストモデルの場合、項目のedit role を返します。モデルがQFileSystemModel の場合は、ファイルの絶対パスを返します。
splitPath()も参照してください 。
QAbstractItemView *QCompleter::popup() const
完了を表示するためのポップアップを返します。
setPopup()も参照 ください。
bool QCompleter::setCurrentRow(int row)
現在の行を指定されたrow に設定する。成功すればtrue
を返し、そうでなければfalse
を返す。
この関数は、currentCompletion() と一緒に使用して、すべての補完候補を繰り返し処理することもできる。
currentRow()、currentCompletion()、completionCount()も参照 。
void QCompleter::setModel(QAbstractItemModel *model)
model に補完を提供するモデルを設定します。model はリストモデルでもツリーモデルでもかまいません。モデルが既に設定されていて、QCompleter を親として持つ場合、そのモデルは削除されます。
便宜上、model がQFileSystemModel の場合、QCompleter はそのcaseSensitivity を Windows ではQt::CaseInsensitive に、その他のプラットフォームではQt::CaseSensitive に切り替えます。
completionModel()、modelSorting 、Handling Tree Modelsも参照のこと 。
void QCompleter::setPopup(QAbstractItemView *popup)
補完の表示に使用するポップアップをpopup に設定します。QCompleter がビューの所有権を持ちます。
completionMode() がQCompleter::PopupCompletion またはQCompleter::UnfilteredPopupCompletion に設定されると、QListView が自動的に作成されます。 デフォルトのポップアップはcompletionColumn() を表示します。
ビューの設定が変更される前にこの関数が呼び出されるようにしてください。これは、ビューのプロパティが、ビューにモデルが設定されていることを必要とする場合があるためです(例えば、ビューの列を非表示にするには、ビューにモデルが設定されている必要があります)。
popup()も参照してください 。
void QCompleter::setWidget(QWidget *widget)
補完が提供されるウィジェットをwidget に設定します。この関数は、QLineEdit::setCompleter() を使ってQLineEdit にQCompleter が設定されたとき、またはQComboBox::setCompleter() を使ってQComboBox に が設定されたときに、自動的に呼び出されます。カスタムウィジェットに補完を提供する場合は、ウィジェットを明示的に設定する必要があります。
widget(),setModel(),setPopup()も参照してください 。
[virtual]
QStringList QCompleter::splitPath(const QString &path) const
指定されたpath を、model() の各レベルでマッチングに使用される文字列に分割します。
splitPath() の既定の実装では、sourceModel() がQFileSystemModel の場合、QDir::separator() に基づいてファイル・システム・パスを分割します。
リスト・モデルと共に使用すると、返されるリストの最初の項目がマッチングに使用されます。
pathFromIndex() およびHandling Tree Modelsも参照してください 。
QWidget *QCompleter::widget() const
補完オブジェクトが補完を提供しているウィジェットを返します。
setWidget()も参照してください 。
© 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.