QCompleter Class

QCompleter クラスは、アイテムモデルに基づいた補完を提供します。詳細...

Header: #include <QCompleter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: 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 (int i = 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)

completionColumncompletionRolemodelSorting 、および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()

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

[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 のパスを返します。completerオブジェクトは、これを使用して、基礎となるモデルから補完テキストを取得します。

デフォルトの実装では、リスト・モデルの場合、項目の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

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

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

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。