Класс QCompleter
Класс QCompleter предоставляет автодополнение на основе модели элементов. Подробнее...
| Заголовок: | #include <QCompleter> |
| qmake: | QT += widgets |
| С момента: | Qt 4.2 |
| Наследует: | QObject |
Открытые типы
| перечисление | CompletionMode { PopupCompletion, InlineCompletion, UnfilteredPopupCompletion } |
| перечисление | ModelSorting { UnsortedModel, CaseSensitivelySortedModel, CaseInsensitivelySortedModel } |
Свойства
|
|
- 1 свойство унаследовано от QObject
Открытые функции
| QCompleter(QObject *parent = nullptr) | |
| QCompleter(QAbstractItemModel *model, QObject *parent = nullptr) | |
| QCompleter(const QStringList &list, QObject *parent = nullptr) | |
| virtual | ~QCompleter() |
| 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 |
- 34 общедоступных функций, унаследованных от QObject
Открытые слоты
| void | complete(const QRect &rect = QRect()) |
| void | setCompletionPrefix(const QString &prefix) |
| void | setWrapAround(bool wrap) |
- 1 открытый слот, унаследованный от QObject
Сигналы
| void | activated(const QString &text) |
| void | activated(const QModelIndex &index) |
| void | highlighted(const QString &text) |
| void | highlighted(const QModelIndex &index) |
- 2 сигнала, унаследованные от QObject
Переопределённые защищённые функции
| virtual bool | event(QEvent *ev) override |
| virtual bool | eventFilter(QObject *o, QEvent *e) override |
- 9 защищённых функций, унаследованных от QObject
Дополнительные унаследованные члены
- 1 общедоступная переменная, унаследованная от QObject
- 10 статические общедоступные члены, унаследованные от QObject
- 9 защищенные функции, унаследованные от QObject
- 2 защищенные переменные, унаследованные от QObject
Подробное описание
Класс QCompleter предоставляет автодополнение на основе модели элементов.
Вы можете использовать QCompleter для автодополнения в любом виджете Qt, таком как QLineEdit и QComboBox. Когда пользователь начинает вводить слово, QCompleter предлагает возможные варианты завершения слова на основе списка слов. Список слов предоставляется в виде QAbstractItemModel. (Для простых приложений, где список слов статичен, вы можете передать QStringList в конструктор QCompleter.)
Основные принципы использования
Обычно 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 попытается сопоставить префикс автодополнения (т.е. слово, которое пользователь начал вводить) с данными Qt::EditRole в столбце 0 модели, учитывая регистр. Это можно изменить, используя setCompletionRole(), setCompletionColumn() и setCaseSensitivity().
Если модель отсортирована по столбцу и роли, которые используются для автодополнения, вы можете вызвать setModelSorting() с аргументом QCompleter::CaseSensitivelySortedModel или QCompleter::CaseInsensitivelySortedModel. В больших моделях это может значительно повысить производительность, потому что QCompleter может использовать бинарный поиск вместо линейного поиска. Бинарный поиск работает только при filterMode = Qt::MatchStartsWith.
Модель может быть список моделей, табличная модель или дерево модели. Автодополнение для моделей дерева немного более сложно и описано в разделе Обработка моделей дерева ниже.
Свойство completionMode() определяет режим предоставления автодополнения пользователю.
Итерация по автозаполнениям
Для получения одной кандидатной строки вызовите setCompletionPrefix() с текстом, который нужно дополнить, и вызовите currentCompletion(). Вы можете итерировать список автозаполнений следующим образом:
for (int i = 0; completer->setCurrentRow(i); i++)
qDebug() << completer->currentCompletion() << " is match number " << i; completionCount() возвращает общее количество автозаполнений для текущего префикса. completionCount() следует избегать, когда это возможно, так как оно требует сканирования всей модели.
Модель автодополнения
completionModel() возвращает список моделей, содержащий все возможные автозаполнения для текущего префикса автодополнения в порядке их появления в модели. Эта модель может использоваться для отображения текущих автозаполнений в пользовательском представлении. Вызов setCompletionPrefix() автоматически обновляет модель автозаполнения.
Обработка моделей дерева
QCompleter может искать автозаполнения в моделях дерева, предполагая, что любой элемент (или подэлемент или подподэлемент) может однозначно быть представлен строкой, указав путь к элементу. Автодополнение выполняется по одному уровню за раз.
Рассмотрим пример ввода пути к файлу. Модель — это (иерархическая) QFileSystemModel. Автодополнение выполняется для каждого элемента пути. Например, если текущий текст равен C:\Wind, QCompleter может предложить Windows для завершения текущего элемента пути. Аналогично, если текущий текст равен C:\Windows\Sy, QCompleter может предложить System.
Для работы этого типа автодополнения QCompleter должен уметь разделять путь на список строк, которые сопоставляются на каждом уровне. Для C:\Windows\Sy, он должен быть разделен на «C:», «Windows» и «Sy». По умолчанию реализация splitPath() разделяет префикс автодополнения с помощью QDir::separator(), если модель — QFileSystemModel.
Чтобы предоставить автозаполнения, QCompleter должен знать путь от индекса. Это предоставляется методом pathFromIndex(). По умолчанию реализация pathFromIndex() возвращает данные для роли редактирования для моделей списка и абсолютный путь к файлу, если модель — QFileSystemModel.
См. также QAbstractItemModel, QLineEdit, QComboBox и Пример Completer.
Документация по типам членов
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.
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::MatchStartsWith.
Это свойство было добавлено в Qt 5.2.
Функции доступа:
| Qt::MatchFlags | filterMode() const |
| void | setFilterMode(Qt::MatchFlags filterMode) |
maxVisibleItems : int
Это свойство содержит максимальный разрешенный размер дополнений на экране, измеряемый в элементах.
По умолчанию это свойство имеет значение 7.
Это свойство было добавлено в Qt 4.6.
Функции доступа:
| int | maxVisibleItems() const |
| void | setMaxVisibleItems(int maxItems) |
modelSorting : ModelSorting
Это свойство содержит способ сортировки модели.
По умолчанию порядок элементов в модели, предоставляющей дополнения, не предполагается.
Если данные модели для completionColumn() и completionRole() отсортированы по возрастанию, можно установить это свойство в CaseSensitivelySortedModel или CaseInsensitivelySortedModel. В больших моделях это может привести к значительному улучшению производительности, так как объект completer может использовать алгоритм бинарного поиска вместо линейного.
Порядок сортировки (т.е. возрастание или убывание) модели определяется динамически путем проверки содержимого модели.
Примечание: Указанные выше улучшения производительности не могут быть реализованы, когда чувствительность к регистру completer отличается от чувствительности к регистру модели при сортировке.
Функции доступа:
| QCompleter::ModelSorting | modelSorting() const |
| void | setModelSorting(QCompleter::ModelSorting sorting) |
См. также setCaseSensitivity() и QCompleter::ModelSorting.
wrapAround : bool
Это свойство содержит флаг, указывающий, циклически ли перемещаются дополнения при навигации по элементам.
Значение по умолчанию — true.
Это свойство было добавлено в Qt 4.3.
Функции доступа:
| bool | wrapAround() const |
| void | setWrapAround(bool wrap) |
Документация по членам-функциям
QCompleter::QCompleter(QObject *parent = nullptr)
Создает объект completer с заданным parent.
QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = nullptr)
Создает объект completer с заданным parent, который предоставляет дополнения из указанной model.
QCompleter::QCompleter(const QStringList &list, QObject *parent = nullptr)
Создаёт объект QCompleter с заданным parent, использующий указанный list как источник возможных дополнений.
[virtual] QCompleter::~QCompleter()
Уничтожает объект completer.
[signal] void QCompleter::activated(const QString &text)
Этот сигнал отправляется, когда пользователь активирует элемент в popup() (щелчком мыши или нажатием клавиши Return). Приводится текст элемента text.
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную функцию получения указателя на функцию, как показано в этом примере:
connect(completer, QOverload<const QString &>::of(&QCompleter::activated),
[=](const QString &text){ /* ... */ });
[signal] void QCompleter::activated(const QModelIndex &index)
Этот сигнал отправляется, когда пользователь активирует элемент в popup() (щелчком мыши или нажатием клавиши Return). Указан индекс элемента index в completionModel().
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную функцию получения указателя на функцию, как показано в этом примере:
connect(completer, QOverload<const QModelIndex &>::of(&QCompleter::activated),
[=](const QModelIndex &index){ /* ... */ });
[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().
[override virtual protected] bool QCompleter::eventFilter(QObject *o, QEvent *e)
Переопределено из QObject::eventFilter().
[signal] void QCompleter::highlighted(const QString &text)
Этот сигнал отправляется, когда пользователь выделяет элемент во всплывающем окне popup(). Он также отправляется, если complete() вызывается с completionMode(), установленным в QCompleter::InlineCompletion. Передаётся текст элемента text.
Примечание: Сигнал highlighted перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию, как показано в этом примере:
connect(completer, QOverload<const QString &>::of(&QCompleter::highlighted),
[=](const QString &text){ /* ... */ });
[signal] void QCompleter::highlighted(const QModelIndex &index)
Этот сигнал отправляется, когда пользователь выделяет элемент во всплывающем окне popup(). Он также отправляется, если complete() вызывается с completionMode(), установленным в QCompleter::InlineCompletion. Передаётся индекс элемента index в completionModel().
Примечание: Сигнал highlighted перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию, как показано в этом примере:
connect(completer, QOverload<const QModelIndex &>::of(&QCompleter::highlighted),
[=](const QModelIndex &index){ /* ... */ }); QAbstractItemModel *QCompleter::model() const
Возвращает модель, которая предоставляет строки дополнений.
См. также setModel() и completionModel().
[virtual] QString QCompleter::pathFromIndex(const QModelIndex &index) const
Возвращает путь для данного index. Объект completer использует его для получения текста дополнения из базовой модели.
По умолчанию реализация возвращает роль редактирования элемента для моделей списков. Она возвращает абсолютный путь к файлу, если модель — 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 на Qt::CaseInsensitive в Windows и Qt::CaseSensitive на других платформах.
См. также completionModel(), modelSorting и Обработка древовидных моделей.
void QCompleter::setPopup(QAbstractItemView *popup)
Устанавливает всплывающее окно для отображения дополнений в popup. QCompleter принимает владение представлением.
QListView автоматически создаётся, когда completionMode() устанавливается в QCompleter::PopupCompletion или QCompleter::UnfilteredPopupCompletion. По умолчанию всплывающее окно отображает completionColumn().
Убедитесь, что эта функция вызвана до изменения настроек представления. Это необходимо, так как свойства представления могут потребовать, чтобы модель была установлена в представлении (например, скрытие столбцов в представлении требует установки модели в представлении).
См. также popup().
void QCompleter::setWidget(QWidget *widget)
Устанавливает виджет, для которого предоставляются дополнения, в widget. Эта функция автоматически вызывается, когда QCompleter устанавливается на QLineEdit с помощью QLineEdit::setCompleter() или на QComboBox с помощью QComboBox::setCompleter(). Виджет необходимо явно установить, предоставляя дополнения для пользовательских виджетов.
См. также widget(), setModel() и setPopup().
[virtual] QStringList QCompleter::splitPath(const QString &path) const
Разделяет указанный path на строки, которые используются для соответствия на каждом уровне в model().
По умолчанию реализация splitPath() разделяет путь к файлу на основе QDir::separator(), когда sourceModel() является QFileSystemModel.
При использовании с моделями списков первый элемент в возвращаемом списке используется для сопоставления.
См. также pathFromIndex() и Обработка древовидных моделей.
QWidget *QCompleter::widget() const
Возвращает виджет, для которого объект completer предоставляет дополнения.
См. также setWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qcompleter.html