QCompleter Class
La clase QCompleter proporciona complementos basados en un modelo de elementos. Más...
| Cabecera: | #include <QCompleter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QObject |
Tipos públicos
| enum | CompletionMode { PopupCompletion, InlineCompletion, UnfilteredPopupCompletion } |
| enum | ModelSorting { UnsortedModel, CaseSensitivelySortedModel, CaseInsensitivelySortedModel } |
Propiedades
|
|
Funciones públicas
| 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 |
Ranuras públicas
| void | complete(const QRect &rect = QRect()) |
| void | setCompletionPrefix(const QString &prefix) |
| void | setWrapAround(bool wrap) |
Señales
| void | activated(const QModelIndex &index) |
| void | activated(const QString &text) |
| void | highlighted(const QModelIndex &index) |
| void | highlighted(const QString &text) |
Funciones protegidas reimplementadas
| virtual bool | event(QEvent *ev) override |
| virtual bool | eventFilter(QObject *o, QEvent *e) override |
Descripción detallada
Puede usar QCompleter para proporcionar autocompletados en cualquier widget Qt, como QLineEdit y QComboBox. Cuando el usuario empieza a escribir una palabra, QCompleter sugiere posibles formas de completar la palabra, basándose en una lista de palabras. La lista de palabras se proporciona como QAbstractItemModel. (Para aplicaciones simples, donde la lista de palabras es estática, puede pasar un QStringList al constructor de QCompleter).
Uso básico
Un QCompleter se utiliza normalmente con un QLineEdit o QComboBox. Por ejemplo, a continuación se muestra cómo proporcionar autocompletados a partir de una simple lista de palabras en un 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);
Se puede utilizar QFileSystemModel para autocompletar nombres de archivo. Por ejemplo:
QCompleter *completer = new QCompleter(this); completer->setModel(new QFileSystemModel(completer)); lineEdit->setCompleter(completer);
Para establecer el modelo sobre el que debe operar QCompleter, llame a setModel(). Por defecto, QCompleter intentará hacer coincidir el completion prefix (es decir, la palabra que el usuario ha empezado a escribir) con los datos de Qt::EditRole almacenados en la columna 0 del modelo caso por caso. Esto puede cambiarse utilizando setCompletionRole(), setCompletionColumn(), y setCaseSensitivity().
Si el modelo está ordenado según la columna y el rol que se utilizan para completar, puede llamar a setModelSorting() con QCompleter::CaseSensitivelySortedModel o QCompleter::CaseInsensitivelySortedModel como argumento. En los modelos grandes, esto puede conducir a mejoras significativas en el rendimiento, porque QCompleter puede entonces utilizar la búsqueda binaria en lugar de la búsqueda lineal. La búsqueda binaria sólo funciona cuando filterMode es Qt::MatchStartsWith.
El modelo puede ser un list model, un table model, o un tree model. Completar modelos de árbol es un poco más complicado y se trata en la sección Handling Tree Models más adelante.
El completionMode() determina el modo utilizado para proporcionar las compleciones al usuario.
Iteración a través de las finalizaciones
Para recuperar una sola cadena candidata, llame a setCompletionPrefix() con el texto que necesita ser completado y llame a currentCompletion(). Puede iterar por la lista de completados como se indica a continuación:
for(int i = 0; completer->setCurrentRow(i); i++) qDebug() << completer->currentCompletion() << " is match number " << i;
completionCount() devuelve el número total de terminaciones para el prefijo actual. completionCount() debe evitarse siempre que sea posible, ya que requiere un escaneo de todo el modelo.
El modelo de terminación
completionModel() devuelve un modelo de lista que contiene todas las terminaciones posibles para el prefijo de terminación actual, en el orden en que aparecen en el modelo. Este modelo puede utilizarse para mostrar las terminaciones actuales en una vista personalizada. La llamada a setCompletionPrefix() actualiza automáticamente el modelo de finalización.
Manejo de Modelos de Árbol
QCompleter puede buscar completados en modelos de árbol, asumiendo que cualquier elemento (o sub-elemento o sub-sub-elemento) puede ser representado inequívocamente como una cadena especificando la ruta al elemento. La finalización se realiza nivel por nivel.
Tomemos el ejemplo de un usuario que teclea la ruta de un sistema de archivos. El modelo es un QFileSystemModel(jerárquico). La finalización se produce para cada elemento de la ruta. Por ejemplo, si el texto actual es C:\Wind, QCompleter podría sugerir Windows para completar el elemento actual de la ruta. Del mismo modo, si el texto actual es C:\Windows\Sy, QCompleter podría sugerir System.
Para que este tipo de completado funcione, QCompleter necesita ser capaz de dividir la ruta en una lista de cadenas que coincidan en cada nivel. Para C:\Windows\Sy, necesita ser dividida como "C:", "Windows" y "Sy". La implementación por defecto de splitPath(), divide el completionPrefix utilizando QDir::separator() si el modelo es un QFileSystemModel.
Para proporcionar terminaciones, QCompleter necesita conocer la ruta de un índice. Esto lo proporciona pathFromIndex(). La implementación por defecto de pathFromIndex(), devuelve los datos de edit role para modelos de lista y la ruta absoluta del archivo si el modo es un QFileSystemModel.
Véase también QAbstractItemModel, QLineEdit, QComboBox, y Ejemplo de completador.
Documentación de tipos de miembros
enum QCompleter::CompletionMode
Este enum especifica cómo se proporcionan los complementos al usuario.
| Constante | Valor | Descripción |
|---|---|---|
QCompleter::PopupCompletion | 0 | Los complementos actuales se muestran en una ventana emergente. |
QCompleter::InlineCompletion | 2 | Los complementos aparecen en línea (como texto seleccionado). |
QCompleter::UnfilteredPopupCompletion | 1 | Todas las terminaciones posibles se muestran en una ventana emergente con la sugerencia más probable indicada como actual. |
Véase también setCompletionMode().
enum QCompleter::ModelSorting
Este enum especifica cómo se ordenan los elementos del modelo.
| Constante | Valor | Descripción |
|---|---|---|
QCompleter::UnsortedModel | 0 | El modelo no está ordenado. |
QCompleter::CaseSensitivelySortedModel | 1 | El modelo está ordenado según mayúsculas y minúsculas. |
QCompleter::CaseInsensitivelySortedModel | 2 | El modelo está ordenado sin tener en cuenta mayúsculas y minúsculas. |
Véase también setModelSorting().
Documentación de propiedades
caseSensitivity : Qt::CaseSensitivity
Esta propiedad contiene la distinción entre mayúsculas y minúsculas de la concordancia
El valor por defecto es Qt::CaseSensitive.
Funciones de acceso:
| Qt::CaseSensitivity | caseSensitivity() const |
| void | setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) |
Véase también completionColumn, completionRole, modelSorting, y filterMode.
completionColumn : int
Esta propiedad contiene la columna del modelo en la que se buscan las terminaciones.
Si el popup() es un QListView, se configura automáticamente para mostrar esta columna.
Por defecto, la columna de coincidencias es 0.
Funciones de acceso:
| int | completionColumn() const |
| void | setCompletionColumn(int column) |
Véase también completionRole y caseSensitivity.
completionMode : CompletionMode
cómo se proporcionan las terminaciones al usuario
El valor por defecto es QCompleter::PopupCompletion.
Funciones de acceso:
| QCompleter::CompletionMode | completionMode() const |
| void | setCompletionMode(QCompleter::CompletionMode mode) |
completionPrefix : QString
Esta propiedad contiene el prefijo de terminación utilizado para proporcionar terminaciones.
completionModel() se actualiza para reflejar la lista de posibles coincidencias de prefix.
Funciones de acceso:
| QString | completionPrefix() const |
| void | setCompletionPrefix(const QString &prefix) |
completionRole : int
Esta propiedad contiene el rol del ítem que se utilizará para consultar el contenido de los ítems para buscar coincidencias.
El rol por defecto es Qt::EditRole.
Funciones de acceso:
| int | completionRole() const |
| void | setCompletionRole(int role) |
Véase también completionColumn y caseSensitivity.
filterMode : Qt::MatchFlags
Esta propiedad controla cómo se realiza el filtrado.
Si filterMode se establece en Qt::MatchStartsWith, sólo se mostrarán las entradas que comiencen con los caracteres escritos. Qt::MatchContains mostrará las entradas que contengan los caracteres escritos, y Qt::MatchEndsWith las que terminen con los caracteres escritos.
Establecer filterMode a cualquier otro Qt::MatchFlag emitirá una advertencia, y no se realizará ninguna acción. Por este motivo, el indicador Qt::MatchCaseSensitive no tiene ningún efecto. Utilice la propiedad caseSensitivity para controlar la sensibilidad a mayúsculas y minúsculas.
El modo por defecto es Qt::MatchStartsWith.
Funciones de acceso:
| Qt::MatchFlags | filterMode() const |
| void | setFilterMode(Qt::MatchFlags filterMode) |
Véase también caseSensitivity.
maxVisibleItems : int
Esta propiedad contiene el tamaño máximo permitido en pantalla del completador, medido en ítems
Por defecto, esta propiedad tiene un valor de 7.
Funciones de acceso:
| int | maxVisibleItems() const |
| void | setMaxVisibleItems(int maxItems) |
modelSorting : ModelSorting
Esta propiedad mantiene la forma en que se ordena el modelo
Por defecto, no se hace ninguna suposición sobre el orden de los elementos en el modelo que proporciona las terminaciones.
Si los datos del modelo para completionColumn() y completionRole() están ordenados en orden ascendente, puede establecer esta propiedad a CaseSensitivelySortedModel o CaseInsensitivelySortedModel. En modelos de gran tamaño, esto puede suponer una mejora significativa del rendimiento, ya que el objeto completador puede utilizar un algoritmo de búsqueda binaria en lugar de un algoritmo de búsqueda lineal.
El orden de clasificación (es decir, ascendente o descendente) del modelo se determina dinámicamente inspeccionando el contenido del modelo.
Nota: Las mejoras de rendimiento descritas anteriormente no pueden tener lugar cuando la caseSensitivity del completador es diferente a la sensibilidad a mayúsculas y minúsculas utilizada por la del modelo al ordenar.
Funciones de acceso:
| QCompleter::ModelSorting | modelSorting() const |
| void | setModelSorting(QCompleter::ModelSorting sorting) |
Véase también setCaseSensitivity() y QCompleter::ModelSorting.
wrapAround : bool
Esta propiedad mantiene la envoltura de las terminaciones cuando se navega a través de los ítems.
Por defecto es true.
Funciones de acceso:
| bool | wrapAround() const |
| void | setWrapAround(bool wrap) |
Documentación de funciones miembro
QCompleter::QCompleter(QObject *parent = nullptr)
Construye un objeto completador con la dirección parent.
QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = nullptr)
Construye un objeto completer con el parent dado que proporciona completions del model especificado.
QCompleter::QCompleter(const QStringList &list, QObject *parent = nullptr)
Construye un objeto QCompleter con el parent dado que utiliza el list especificado como fuente de posibles terminaciones.
[override virtual noexcept] QCompleter::~QCompleter()
Destruye el objeto completador.
[signal] void QCompleter::activated(const QModelIndex &index)
Esta señal se envía cuando un elemento de la popup() es activado por el usuario. (haciendo clic o pulsando retorno). Se da el index del elemento en el completionModel().
Nota: Esta señal está sobrecargada. Para conectarse a esta señal:
// 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)
Esta señal se envía cuando un elemento de popup() es activado por el usuario (haciendo clic o pulsando retorno). Se indica la dirección text del elemento.
Nota: Esta señal está sobrecargada. Para conectarse a esta señal:
// 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())
Para los modos QCompleter::PopupCompletion y QCompletion::UnfilteredPopupCompletion, al llamar a esta función se muestra la ventana emergente con las terminaciones actuales. Por defecto, si no se especifica rect, la ventana emergente se muestra en la parte inferior de widget(). Si se especifica rect, la ventana emergente se muestra en el borde izquierdo del rectángulo.
Para el modo QCompleter::InlineCompletion, la señal highlighted() se dispara con la compleción actual.
int QCompleter::completionCount() const
Devuelve el número de terminaciones para el prefijo actual. Para un modelo sin ordenar con un gran número de elementos esto puede ser costoso. Utilice setCurrentRow() y currentCompletion() para recorrer todas las terminaciones.
QAbstractItemModel *QCompleter::completionModel() const
Devuelve el modelo de finalización. El modelo de finalización es un modelo de lista de sólo lectura que contiene todas las posibles coincidencias para el prefijo de finalización actual. El modelo de terminación se actualiza automáticamente para reflejar las terminaciones actuales.
Nota: El valor de retorno de esta función se define como QAbstractItemModel por motivos de generalidad. El tipo real de modelo devuelto es una instancia de una subclase de QAbstractProxyModel.
Véase también completionPrefix y model().
QString QCompleter::currentCompletion() const
Devuelve la cadena de finalización actual. Esto incluye la completionPrefix. Cuando se utiliza junto con setCurrentRow(), se puede utilizar para iterar a través de todas las coincidencias.
Véase también setCurrentRow() y currentIndex().
QModelIndex QCompleter::currentIndex() const
Devuelve el índice del modelo de la finalización actual en completionModel().
Véase también setCurrentRow(), currentCompletion() y model().
int QCompleter::currentRow() const
Devuelve la fila actual.
Véase también setCurrentRow().
[override virtual protected] bool QCompleter::event(QEvent *ev)
Reimplementa: QObject::event(QEvent *e).
[override virtual protected] bool QCompleter::eventFilter(QObject *o, QEvent *e)
Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).
[signal] void QCompleter::highlighted(const QModelIndex &index)
Esta señal se envía cuando un elemento de popup() es resaltado por el usuario. También se envía si se llama a complete() con completionMode() establecido en QCompleter::InlineCompletion. Se indica el elemento index en completionModel().
Nota: Esta señal está sobrecargada. Para conectarse a esta señal:
// 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)
Esta señal se envía cuando un elemento de popup() es resaltado por el usuario. También se envía si se llama a complete() con completionMode() establecido en QCompleter::InlineCompletion. Se indica el elemento text.
Nota: Esta señal está sobrecargada. Para conectarse a esta señal:
// 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
Devuelve el modelo que proporciona cadenas de finalización.
Véase también setModel() y completionModel().
[virtual] QString QCompleter::pathFromIndex(const QModelIndex &index) const
Devuelve la ruta de la dirección index. El objeto completer lo utiliza para obtener el texto de finalización del modelo subyacente.
La implementación por defecto devuelve el edit role del elemento para los modelos de lista. Devuelve la ruta absoluta del archivo si el modelo es un QFileSystemModel.
Véase también splitPath().
QAbstractItemView *QCompleter::popup() const
Devuelve la ventana emergente utilizada para mostrar las finalizaciones.
Véase también setPopup().
bool QCompleter::setCurrentRow(int row)
Establece la fila actual en el row especificado. Devuelve true si tiene éxito; en caso contrario devuelve false.
Esta función puede utilizarse junto con currentCompletion() para recorrer todas las terminaciones posibles.
Véase también currentRow(), currentCompletion() y completionCount().
void QCompleter::setModel(QAbstractItemModel *model)
Establece el modelo que proporciona complementos a model. model puede ser un modelo de lista o un modelo de árbol. Si un modelo ya se ha establecido previamente y tiene el QCompleter como padre, se elimina.
Por comodidad, si model es un QFileSystemModel, QCompleter cambia su caseSensitivity por Qt::CaseInsensitive en Windows y Qt::CaseSensitive en otras plataformas.
Véase también completionModel(), modelSorting, y Handling Tree Models.
void QCompleter::setPopup(QAbstractItemView *popup)
Establece la ventana emergente utilizada para mostrar las finalizaciones en popup. QCompleter se apropia de la vista.
Un QListView se crea automáticamente cuando el completionMode() se establece en QCompleter::PopupCompletion o QCompleter::UnfilteredPopupCompletion. El popup por defecto muestra el completionColumn().
Asegúrese de que se llama a esta función antes de modificar la configuración de la vista. Esto es necesario ya que las propiedades de la vista pueden requerir que se haya establecido un modelo en la vista (por ejemplo, ocultar columnas en la vista requiere que se establezca un modelo en la vista).
Véase también popup().
void QCompleter::setWidget(QWidget *widget)
Establece el widget para el que se proporcionan los complementos en widget. Esta función se llama automáticamente cuando se establece un QCompleter en un QLineEdit utilizando QLineEdit::setCompleter() o en un QComboBox utilizando QComboBox::setCompleter(). El widget debe establecerse explícitamente cuando se proporcionan complementos para widgets personalizados.
Véase también widget(), setModel() y setPopup().
[virtual] QStringList QCompleter::splitPath(const QString &path) const
Divide el path dado en cadenas que se utilizan para coincidir en cada nivel en el model().
La implementación predeterminada de splitPath() divide una ruta de sistema de archivos basada en QDir::separator() cuando el sourceModel() es un QFileSystemModel.
Cuando se utiliza con modelos de lista, el primer elemento de la lista devuelta se utiliza para la correspondencia.
Véase también pathFromIndex() y Handling Tree Models.
QWidget *QCompleter::widget() const
Devuelve el widget para el que el objeto completer está proporcionando compleciones.
Véase también 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.