En esta página

QSqlQueryModel Class

La clase QSqlQueryModel proporciona un modelo de datos de sólo lectura para conjuntos de resultados SQL. Más...

Cabecera: #include <QSqlQueryModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Hereda: QAbstractTableModel
Heredado por:

QSqlTableModel

Funciones Públicas

QSqlQueryModel(QObject *parent = nullptr)
virtual ~QSqlQueryModel()
virtual void clear()
QSqlError lastError() const
const QSqlQuery &query() const
QSqlRecord record(int row) const
QSqlRecord record() const
(since 6.9) void refresh()
(since 6.2) void setQuery(QSqlQuery &&query)
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

Funciones Públicas Reimplementadas

virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const override
virtual int columnCount(const QModelIndex &index = QModelIndex()) const override
virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const override
virtual void fetchMore(const QModelIndex &parent = QModelIndex()) override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual QHash<int, QByteArray> roleNames() const override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override

Funciones Protegidas

virtual QModelIndex indexInQuery(const QModelIndex &item) const
virtual void queryChange()
void setLastError(const QSqlError &error)

Descripción Detallada

QSqlQueryModel es una interfaz de alto nivel para ejecutar sentencias SQL y recorrer el conjunto de resultados. Se construye sobre el nivel inferior QSqlQuery y puede ser utilizado para proporcionar datos a las clases de vista como QTableView. Por ejemplo:

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();

Configuramos la consulta del modelo, luego configuramos las etiquetas que se muestran en la cabecera de la vista.

QSqlQueryModel también se puede utilizar para acceder a una base de datos mediante programación, sin vincularla a una vista:

    QSqlQueryModel model;
    model.setQuery("SELECT name, salary FROM employee");
    int salary = model.record(4).value("salary").toInt();

El fragmento de código anterior extrae el campo salary del registro 4 del conjunto de resultados de la consulta SELECT. Dado que salary es la 2ª columna (o índice de columna 1), podemos reescribir la última línea de la siguiente manera:

    int salary = model.data(model.index(4, 1)).toInt();

El modelo es de sólo lectura por defecto. Para hacerlo de lectura-escritura, debes subclasificarlo y reimplementar setData() y flags(). Otra opción es utilizar QSqlTableModel, que proporciona un modelo de lectura-escritura basado en una única tabla de base de datos.

El ejemplo querymodel ilustra cómo utilizar QSqlQueryModel para mostrar el resultado de una consulta. También muestra cómo subclasificar QSqlQueryModel para personalizar el contenido de los datos antes de mostrarlos al usuario, y cómo crear un modelo de lectura-escritura basado en QSqlQueryModel.

Si la base de datos no devuelve el número de filas seleccionadas en una consulta, el modelo obtendrá filas de forma incremental. Véase fetchMore() para más información.

Ver también QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, Programación Modelo/Vista, y Ejemplo de Modelo de Consulta.

Documentación de las funciones miembro

[explicit] QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)

Crea un QSqlQueryModel vacío con la dirección parent.

[virtual noexcept] QSqlQueryModel::~QSqlQueryModel()

Destruye el objeto y libera los recursos asignados.

Véase también clear().

[override virtual] bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const

Reimplementa: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

Devuelve true si es posible leer más filas de la base de datos. Esto sólo afecta a las bases de datos que no devuelven el tamaño de una consulta (véase QSqlDriver::hasFeature()).

parent debería ser siempre un valor inválido QModelIndex.

Véase también fetchMore().

[virtual] void QSqlQueryModel::clear()

Borra el modelo y libera cualquier recurso adquirido.

[override virtual] int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const

Reimplementa: QAbstractItemModel::columnCount(const QModelIndex &parent) const.

[override virtual] QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const

Reimplementa: QAbstractItemModel::data(const QModelIndex &index, int rol) const.

Devuelve el valor de item y role especificados.

Si item está fuera de los límites o si se ha producido un error, se devuelve un QVariant no válido.

Véase también lastError().

[override virtual] void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())

Reimplementa: QAbstractItemModel::fetchMore(const QModelIndex &parent).

Obtiene más filas de una base de datos. Esto sólo afecta a las bases de datos que no informan del tamaño de la consulta (ver QSqlDriver::hasFeature()).

Para forzar la obtención de todo el conjunto de resultados, puede utilizar lo siguiente:

while (myModel->canFetchMore())
    myModel->fetchMore();

parent debería ser siempre un valor no válido QModelIndex.

Véase también canFetchMore().

[override virtual] QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

Reimplementa: QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.

Devuelve los datos de cabecera para el role dado en el section de la cabecera con el orientation especificado.

Véase también setHeaderData().

[virtual protected] QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const

Devuelve el índice del valor en el conjunto de resultados de la base de datos para el item dado en el modelo.

El valor devuelto es idéntico a item si no se han insertado, eliminado o movido columnas o filas.

Devuelve un índice de modelo no válido si item está fuera de los límites o si item no apunta a un valor en el conjunto de resultados.

Véase también QSqlTableModel::indexInQuery(), insertColumns() y removeColumns().

[override virtual] bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

Reimplementa: QAbstractItemModel::insertColumns(int columna, int cuenta, const QModelIndex &parent).

Inserta columnas count en el modelo en la posición column. El parámetro parent debe ser siempre un QModelIndex inválido, ya que el modelo no admite relaciones padre-hijo.

Devuelve true si column está dentro de los límites; en caso contrario devuelve false.

Por defecto, las columnas insertadas están vacías. Para rellenarlas con datos, reimplemente data() y gestione cada columna insertada por separado:

QVariant MyModel::data(const QModelIndex &item, int role) const
{
    if (item.column() == m_specialColumnNo) {
        // handle column separately
    }
    return QSqlQueryModel::data(item, role);
}

Véase también removeColumns().

QSqlError QSqlQueryModel::lastError() const

Devuelve información sobre el último error que se ha producido en la base de datos.

Véase también setLastError() y query().

const QSqlQuery &QSqlQueryModel::query() const

Devuelve una referencia al objeto const QSqlQuery asociado a este modelo.

Véase también setQuery().

[virtual protected] void QSqlQueryModel::queryChange()

Esta función virtual es llamada cada vez que cambia la consulta. La implementación por defecto no hace nada.

query() devuelve la nueva consulta.

Véase también query() y setQuery().

QSqlRecord QSqlQueryModel::record(int row) const

Devuelve el registro que contiene información sobre los campos de la consulta actual. Si row es el índice de una fila válida, el registro se rellenará con los valores de esa fila.

Si el modelo no está inicializado, se devolverá un registro vacío.

Véase también QSqlRecord::isEmpty().

QSqlRecord QSqlQueryModel::record() const

Devuelve un registro vacío que contiene información sobre los campos de la consulta actual.

Si el modelo no está inicializado, se devolverá un registro vacío.

Se trata de una función sobrecargada.

Véase también QSqlRecord::isEmpty().

[since 6.9] void QSqlQueryModel::refresh()

Reejecuta la consulta actual para obtener los datos de la misma conexión de base de datos.

Nota: refresh() no es aplicable cuando la consulta contiene valores vinculados.

Esta función se introdujo en Qt 6.9.

Véase también setQuery(QSqlQuery &&query) y QSqlQuery::boundValue().

[override virtual] bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

Reimplementa: QAbstractItemModel::removeColumns(int columna, int cuenta, const QModelIndex &parent).

Elimina count columnas del modelo a partir de la posición column. El parámetro parent debe ser siempre un QModelIndex inválido, ya que el modelo no soporta relaciones padre-hijo.

Al eliminar las columnas, éstas quedan ocultas. No afecta a la información subyacente QSqlQuery.

Devuelve true si se han eliminado las columnas; en caso contrario, devuelve false.

[override virtual] QHash<int, QByteArray> QSqlQueryModel::roleNames() const

Reimplementa: QAbstractItemModel::roleNames() const.

Devuelve los nombres de rol del modelo.

Qt sólo define un rol para QSqlQueryModel:

Rol QtNombre de rol QML
Qt::DisplayRolemostrar

[override virtual] int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const

Reimplementa: QAbstractItemModel::rowCount(const QModelIndex &parent) const.

Si la base de datos soporta devolver el tamaño de una consulta (ver QSqlDriver::hasFeature()), se devuelve el número de filas de la consulta actual. En caso contrario, devuelve el número de filas actualmente almacenadas en caché en el cliente.

parent debe ser siempre un valor inválido QModelIndex.

Véase también canFetchMore() y QSqlDriver::hasFeature().

[override virtual] bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

Reimplementa: QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).

Establece el título de una cabecera horizontal para el role especificado en value. Esto es útil si el modelo se utiliza para mostrar datos en una vista (por ejemplo, QTableView).

Devuelve true si orientation es Qt::Horizontal y section se refiere a una sección válida; en caso contrario devuelve false.

Tenga en cuenta que esta función no puede utilizarse para modificar valores en la base de datos, ya que el modelo es de sólo lectura.

Véase también headerData() y data().

[protected] void QSqlQueryModel::setLastError(const QSqlError &error)

Función protegida que permite a las clases derivadas establecer el valor del último error ocurrido en la base de datos en error.

Véase también lastError().

[since 6.2] void QSqlQueryModel::setQuery(QSqlQuery &&query)

Reinicia el modelo y establece que el proveedor de datos sea el dado query. Tenga en cuenta que la consulta debe estar activa y no debe ser isForwardOnly().

lastError() puede utilizarse para obtener información detallada si se ha producido un error al establecer la consulta.

Nota: Llamar a setQuery() eliminará cualquier columna insertada.

Esta función se introdujo en Qt 6.2.

Véase también query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly(), y lastError().

void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

Ejecuta la consulta query para la conexión de base de datos indicada db. Si no se especifica ninguna base de datos (o una base de datos no válida), se utiliza la conexión por defecto.

lastError() puede utilizarse para obtener información detallada si se ha producido un error al realizar la consulta.

Ejemplo:

QSqlQueryModel model; model.setQuery("select * from MiTabla");if (model.lastError().isValid())    qDebug() << model.lastError();

Se trata de una función sobrecargada.

Véase también query(), queryChange() y lastError().

© 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.