このページでは

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 Widgets でオートコンプリート機能を提供できます。ユーザーが単語の入力を開始すると、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 の例」も参照してください 。

メンバ型のドキュメント

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)

指定されたparent を使用して、指定されたmodel からの補完を提供するcompleterオブジェクトを生成します。

QCompleter::QCompleter(const QStringList &list, QObject *parent = nullptr)

指定されたparent を使用して、指定されたlist を候補の補完ソースとして使用するQCompleterオブジェクトを作成します。

[override virtual noexcept] QCompleter::~QCompleter()

コンプリーターオブジェクトを破棄します。

[signal] void QCompleter::activated(const QModelIndex &index)

このシグナルは、popup() 内のアイテムがユーザーによってアクティブ化されたとき(クリックまたはリターンキーの押下など)に送信されます。completionModel() 内のそのアイテムのindex が渡されます。

注:この シグナルは オーバーロードされています。このシグナルに接続するには:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::activated),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::activated),
        this, [](const QModelIndex &index) { /* handle activated */ });
その他の例や手法については、「オーバーロードされたシグナルへの接続」を参照してください。

[signal] void QCompleter::activated(const QString &text)

このシグナルは、popup()内のアイテムがユーザーによって(クリックまたはReturnキーの押下により)アクティブ化されたときに送信されます。そのアイテムのtext が渡されます。

注:この シグナルは オーバーロードされています。このシグナルに接続するには:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::activated),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::activated),
        this, [](const QString &text) { /* handle activated */ });
その他の例や手法については、「オーバーロードされたシグナルへの接続」を参照してください。

[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 が渡されます。

注:この シグナルは オーバーロードされています。このシグナルに接続するには:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::highlighted),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::highlighted),
        this, [](const QModelIndex &index) { /* handle highlighted */ });
その他の例や手法については、「オーバーロードされたシグナルへの接続」を参照してください。

[signal] void QCompleter::highlighted(const QString &text)

このシグナルは、popup() 内の項目がユーザーによってハイライトされたときに送信されます。また、completionMode() がQCompleter::InlineCompletion に設定された状態でcomplete() が呼び出された場合にも送信されます。項目のtext が渡されます。

注:この シグナルは オーバーロードされています。このシグナルに接続するには:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::highlighted),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::highlighted),
        this, [](const QString &text) { /* handle highlighted */ });
その他の例や手法については、「オーバーロードされたシグナルへの接続」を参照してください。

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 である場合は、そのモデルは削除されます。

便宜上、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

completer オブジェクトが補完を提供しているウィジェットを返します。

setWidget()も参照してください 。

© 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.