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 を使って、QLineEditQComboBox などの 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は線形探索の代わりにバイナリ探索を使用できるため、これは大幅な性能向上につながります。バイナリサーチは、filterModeQt::MatchStartsWith の場合にのみ機能します。

モデルは、list modeltable 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 の場合は絶対ファイル・パスを返します。

QAbstractItemModelQLineEditQComboBox 、およびCompleter Exampleも参照

メンバ型ドキュメント

enum QCompleter::CompletionMode

この列挙型は、補完がどのようにユーザーに提供されるかを指定します。

定数説明
QCompleter::PopupCompletion0現在の補完結果はポップアップウィンドウに表示されます。
QCompleter::InlineCompletion2補完はインラインで表示されます (選択されたテキストとして)。
QCompleter::UnfilteredPopupCompletion1可能性のあるすべての補完候補がポップアップウィンドウに表示され、最も可能性の高い候補が現在のものとして表示されます。

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

enum QCompleter::ModelSorting

この列挙型は、モデルのアイテムがどのようにソートされるかを指定する。

定数説明
QCompleter::UnsortedModel0モデルはソートされていません。
QCompleter::CaseSensitivelySortedModel1モデルは大文字小文字を区別してソートされます。
QCompleter::CaseInsensitivelySortedModel2モデルは大文字小文字を区別せずにソートされる。

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()も参照してください

完了を表示するためのポップアップを返します。

setPopup()も参照 ください。

bool QCompleter::setCurrentRow(int row)

現在の行を指定されたrow に設定する。成功すればtrue を返し、そうでなければfalse を返す。

この関数は、currentCompletion() と一緒に使用して、すべての補完候補を繰り返し処理することもできる。

currentRow()、currentCompletion()、completionCount()も参照

void QCompleter::setModel(QAbstractItemModel *model)

model に補完を提供するモデルを設定します。model はリストモデルでもツリーモデルでもかまいません。モデルが既に設定されていて、QCompleter を親として持つ場合、そのモデルは削除されます。

便宜上、modelQFileSystemModel の場合、QCompleter はそのcaseSensitivity を Windows ではQt::CaseInsensitive に、その他のプラットフォームではQt::CaseSensitive に切り替えます。

completionModel()、modelSortingHandling 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() を使ってQLineEditQCompleter が設定されたとき、または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.