En esta página

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.

ConstanteValorDescripción
QCompleter::PopupCompletion0Los complementos actuales se muestran en una ventana emergente.
QCompleter::InlineCompletion2Los complementos aparecen en línea (como texto seleccionado).
QCompleter::UnfilteredPopupCompletion1Todas 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.

ConstanteValorDescripción
QCompleter::UnsortedModel0El modelo no está ordenado.
QCompleter::CaseSensitivelySortedModel1El modelo está ordenado según mayúsculas y minúsculas.
QCompleter::CaseInsensitivelySortedModel2El 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 */ });
Para más ejemplos y enfoques, véase conectarse a señales sobrecargadas.

[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 */ });
Para más ejemplos y enfoques, véase conectarse a señales sobrecargadas.

[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 */ });
Para ver más ejemplos y enfoques, consulte conectarse a señales sobrecargadas.

[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 */ });
Para más ejemplos y enfoques, véase conectarse a señales sobrecargadas.

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().

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.