Класс QCompleter
Класс QCompleter предоставляет автодополнение на основе модели элементов. Подробнее...
| Заголовок: | #include <QCompleter> |
| qmake: | QT += widgets |
| С момента: | Qt 4.2 |
| Наследует: | QObject |
Открытые типы
| перечисление | CompletionMode { PopupCompletion, InlineCompletion, UnfilteredPopupCompletion } |
| перечисление | ModelSorting { UnsortedModel, CaseSensitivelySortedModel, CaseInsensitivelySortedModel } |
Свойства
|
|
- 1 свойство унаследовано от QObject
Открытые функции
| QCompleter(QObject *parent = Q_NULLPTR) | |
| QCompleter(QAbstractItemModel *model, QObject *parent = Q_NULLPTR) | |
| QCompleter(const QStringList &list, QObject *parent = Q_NULLPTR) | |
| ~QCompleter() | |
| Qt::CaseSensitivity | caseSensitivity() const |
| int | completionColumn() const |
| int | completionCount() const |
| 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 |
| ModelSorting | modelSorting() const |
| virtual QString | pathFromIndex(const QModelIndex &index) const |
| QAbstractItemView * | popup() const |
| void | setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) |
| void | setCompletionColumn(int column) |
| void | setCompletionMode(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(ModelSorting sorting) |
| void | setPopup(QAbstractItemView *popup) |
| void | setWidget(QWidget *widget) |
| virtual QStringList | splitPath(const QString &path) const |
| QWidget * | widget() const |
| bool | wrapAround() const |
- 31 общедоступных функций, унаследованных от 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) |
| virtual bool | eventFilter(QObject *o, QEvent *e) |
- 9 защищённых функций, унаследованных от QObject
Дополнительные унаследованные члены
- 11 статических публичных членов унаследованных от QObject
- 9 защищённых функций, унаследованных от 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 QDirModel(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() разделяет completionPrefix с помощью QDir::separator(), если модель — QFileSystemModel.
Чтобы предоставить варианты автодополнения, QCompleter должен знать путь по индексу. Это предоставляет pathFromIndex(). По умолчанию pathFromIndex() возвращает данные для роли редактирования для моделей списков и абсолютный путь к файлу, если модель — QFileSystemModel.
См. также QAbstractItemModel, QLineEdit, QComboBox и Пример автодополнения.
Документация по типам членов
перечисление QCompleter::CompletionMode
Это перечисление определяет, как варианты автодополнения предоставляются пользователю.
| Постоянная | Значение | Описание |
|---|---|---|
QCompleter::PopupCompletion |
0 |
Текущие варианты автодополнения отображаются в всплывающем окне. |
QCompleter::InlineCompletion |
2 |
Варианты автодополнения отображаются встроены (как выделенный текст). |
QCompleter::UnfilteredPopupCompletion |
1 |
Все возможные варианты автодополнения отображаются во всплывающем окне с наиболее вероятным вариантом, указанным как текущий. |
См. также setCompletionMode().
перечисление 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.
Функции доступа:
| CompletionMode | completionMode() const |
| void | setCompletionMode(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 отличается от чувствительности к регистру модели при сортировке.
Функции доступа:
| ModelSorting | modelSorting() const |
| void | setModelSorting(ModelSorting sorting) |
См. также setCaseSensitivity() и QCompleter::ModelSorting.
wrapAround : bool
Это свойство хранит информацию о циклическом переходе при навигации по элементам дополнений.
По умолчанию значение равно true.
Это свойство было добавлено в Qt 4.3.
Функции доступа:
| bool | wrapAround() const |
| void | setWrapAround(bool wrap) |
Документация функций-членов
QCompleter::QCompleter(QObject *parent = Q_NULLPTR)
Конструирует объект completer с указанным parent.
QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = Q_NULLPTR)
Конструирует объект completer с указанным parent, который предоставляет дополнения из указанной model.
QCompleter::QCompleter(const QStringList &list, QObject *parent = Q_NULLPTR)
Конструирует объект QCompleter с указанным parent, использующий указанный list как источник возможных дополнений.
QCompleter::~QCompleter()
Уничтожает объект completer.
void QCompleter::activated(const QString &text)
Этот сигнал отправляется, когда пользователь активирует элемент в popup() (нажатием мыши или клавиши Return). Передаётся text выбранного элемента.
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию необходимо указать тип сигнала в статическом преобразовании, как показано в данном примере:
connect(completer, static_cast<void(QCompleter::*)(const QString &)>(&QCompleter::activated),
[=](const QString &text){ /* ... */ }); void QCompleter::activated(const QModelIndex &index)
Этот сигнал отправляется, когда пользователь активирует элемент в popup() (нажатием мыши или клавиши Return). Передаётся index выбранного элемента в completionModel().
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию необходимо указать тип сигнала в статическом преобразовании, как показано в данном примере:
connect(completer, static_cast<void(QCompleter::*)(const QModelIndex &)>(&QCompleter::activated),
[=](const QModelIndex &index){ /* ... */ }); 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().
[virtual protected] bool QCompleter::event(QEvent *ev)
Переопределено из QObject::event().
[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 перегружен в этом классе. Чтобы подключиться к этому сигналу с помощью синтаксиса указателя на функцию, необходимо указать тип сигнала в явном преобразовании, как показано в этом примере:
connect(completer, static_cast<void(QCompleter::*)(const QString &)>(&QCompleter::highlighted),
[=](const QString &text){ /* ... */ });
[signal] void QCompleter::highlighted(const QModelIndex &index)
Этот сигнал отправляется, когда пользователь выделяет элемент в popup(). Он также отправляется, если complete() вызывается с completionMode(), установленным в QCompleter::InlineCompletion. Приводится индекс элемента index в completionModel().
Примечание: Сигнал highlighted перегружен в этом классе. Чтобы подключиться к этому сигналу с помощью синтаксиса указателя на функцию, необходимо указать тип сигнала в явном преобразовании, как показано в этом примере:
connect(completer, static_cast<void(QCompleter::*)(const QModelIndex &)>(&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.6/qcompleter.html