Spec-Zone.ru › Qt 6.0

Класс QSqlQueryModel

Класс QSqlQueryModel предоставляет модель данных только для чтения для наборов результатов SQL. Подробнее...

Заголовок: #include <QSqlQueryModel>
CMake: find_package(Qt6 COMPONENTS Sql REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Наследуется от: QAbstractTableModel
Наследует:

QSqlTableModel

  • Список всех членов, включая наследуемые

Открытые функции

QSqlQueryModel(QObject *parent = nullptr)
virtual ~QSqlQueryModel()
virtual void очистить()
QSqlError последняяОшибка() const
QSqlQuery запрос() const
QSqlRecord запись(int row) const
QSqlRecord запись() const
void установитьЗапрос(const QSqlQuery &query)
void установитьЗапрос(const QString &query, const QSqlDatabase &db = QSqlDatabase())

Переопределенные открытые функции

virtual bool можноЗагрузитьБольше(const QModelIndex &parent = QModelIndex()) const override
virtual int количествоСтолбцов(const QModelIndex &index = QModelIndex()) const override
virtual QVariant данные(const QModelIndex &item, int role = Qt::DisplayRole) const override
virtual void загрузитьБольше(const QModelIndex &parent = QModelIndex()) override
virtual QVariant заголовокДанных(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool вставитьСтолбцы(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool удалитьСтолбцы(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual QHash<int, QByteArray> именаРолей() const override
virtual int количествоСтрок(const QModelIndex &parent = QModelIndex()) const override
virtual bool установитьДанныеЗаголовка(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override

Защищенные функции

virtual QModelIndex индексВЗапросе(const QModelIndex &item) const
virtual void изменениеЗапроса()
void установитьПоследнююОшибку(const QSqlError &error)

Подробное описание

QSqlQueryModel — это интерфейс высокого уровня для выполнения SQL-запросов и перемещения по набору результатов. Он построен поверх низкоуровневого QSqlQuery и может использоваться для предоставления данных классам представлений, таким как QTableView. Например:

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

Мы задаём запрос модели, затем настраиваем метки, отображаемые в заголовке представления.

QSqlQueryModel также может использоваться для программного доступа к базе данных без привязки к представлению:

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

В приведённом выше фрагменте кода извлекается поле salary из записи 4 в наборе результатов запроса SELECT. Поскольку salary является 2-м столбцом (или индексом столбца 1), мы можем переписать последнюю строку следующим образом:

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

Модель по умолчанию является только для чтения. Чтобы сделать её чтением и записью, необходимо создать подкласс и переопределить setData() и flags(). Другой вариант — использовать QSqlTableModel, который предоставляет модель чтение-запись, основанную на одной таблице базы данных.

Пример querymodel демонстрирует, как использовать QSqlQueryModel для отображения результатов запроса. Он также показывает, как создать подкласс QSqlQueryModel для настройки содержимого данных перед отображением его пользователю, и как создать модель чтение-запись на основе QSqlQueryModel.

Если база данных не возвращает количество выбранных строк в запросе, модель будет загружать строки по частям. Подробнее см. загрузитьБольше().

См. также QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, Программирование моделей/представлений и Пример запроса модели.

Документация по членам-функциям

QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)

Создаёт пустую QSqlQueryModel с заданным parent.

[virtual] QSqlQueryModel::~QSqlQueryModel()

Уничтожает объект и освобождает все выделенные ресурсы.

См. также очистить().

[override virtual] bool QSqlQueryModel::можноЗагрузитьБольше(const QModelIndex &parent = QModelIndex()) const

Переопределяет: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

Возвращает true если можно прочитать ещё строки из базы данных. Это относится только к базам данных, которые не сообщают размер запроса (см. QSqlDriver::hasFeature()).

parent всегда должен быть невалидным QModelIndex.

См. также загрузитьБольше().

[virtual] void QSqlQueryModel::очистить()

Очищает модель и освобождает все полученные ресурсы.

[override virtual] int QSqlQueryModel::количествоСтолбцов(const QModelIndex &index = QModelIndex()) const

Переопределяет: QAbstractItemModel::columnCount(const QModelIndex &parent) const.

[override virtual] QVariant QSqlQueryModel::данные(const QModelIndex &item, int role = Qt::DisplayRole) const

Переопределяет: QAbstractItemModel::data(const QModelIndex &index, int role) const.

Возвращает значение для указанного item и role.

Если item находится вне границ или произошла ошибка, возвращается невалидный QVariant.

См. также последняяОшибка().

[override virtual] void QSqlQueryModel::загрузитьБольше(const QModelIndex &parent = QModelIndex())

Переопределяет: QAbstractItemModel::fetchMore(const QModelIndex &parent).

Загружает больше строк из базы данных. Это относится только к базам данных, которые не сообщают размер запроса (см. QSqlDriver::hasFeature()).

Для принудительной загрузки всего набора результатов вы можете использовать следующее:

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

parent всегда должен быть невалидным QModelIndex.

См. также можноЗагрузитьБольше().

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

Реализует: QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.

Возвращает данные заголовка для заданного role в section заголовка с указанной orientation.

См. также setHeaderData().

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

Возвращает индекс значения в наборе результатов базы данных для заданного item в модели.

Возвращаемое значение идентично item, если не вставлялись, удалялись или перемещались столбцы или строки.

Возвращает недопустимый индекс модели, если item находится за пределами границ или если item не указывает на значение в наборе результатов.

См. также QSqlTableModel::indexInQuery(), insertColumns() и removeColumns().

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

Реализует: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).

Вставляет count столбцов в модель в позиции column. Параметр parent должен всегда быть недопустимым индексом QModelIndex, так как модель не поддерживает отношения «родитель-потомок».

Возвращает true , если column находится в пределах границ; в противном случае возвращает false.

По умолчанию вставленные столбцы пусты. Чтобы заполнить их данными, переопределите data() и обработайте каждый вставленный столбец отдельно:

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

См. также removeColumns().

QSqlError QSqlQueryModel::lastError() const

Возвращает информацию об последней ошибке, произошедшей в базе данных.

См. также setLastError() и query().

QSqlQuery QSqlQueryModel::query() const

Возвращает QSqlQuery, связанный с этой моделью.

См. также setQuery().

[virtual protected] void QSqlQueryModel::queryChange()

Этот виртуальный метод вызывается всякий раз, когда запрос изменяется. По умолчанию он ничего не делает.

query() возвращает новый запрос.

См. также query() и setQuery().

QSqlRecord QSqlQueryModel::record(int row) const

Возвращает запись, содержащую информацию о полях текущего запроса. Если row — индекс допустимой строки, запись будет заполнена значениями из этой строки.

Если модель не инициализирована, будет возвращена пустая запись.

См. также QSqlRecord::isEmpty().

QSqlRecord QSqlQueryModel::record() const

Это перегруженный метод.

Возвращает пустую запись, содержащую информацию о полях текущего запроса.

Если модель не инициализирована, будет возвращена пустая запись.

См. также QSqlRecord::isEmpty().

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

Реализует: QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).

Удаляет count столбцов из модели, начиная с позиции column. Параметр parent должен всегда быть недопустимым индексом QModelIndex, так как модель не поддерживает отношения «родитель-потомок».

Удаление столбцов эффективно скрывает их. Это не влияет на базовый QSqlQuery.

Возвращает true , если столбцы были удалены; в противном случае возвращает false.

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

Реализует: QAbstractItemModel::roleNames() const.

Возвращает имена ролей модели.

Qt определяет только одну роль для QSqlQueryModel:

Qt Role QML Role Name
Qt::DisplayRole display

Этот метод был введён в Qt 5.10.

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

Реализует: QAbstractItemModel::rowCount(const QModelIndex &parent) const.

Если база данных поддерживает возврат размера запроса (см. QSqlDriver::hasFeature()), возвращается количество строк текущего запроса. В противном случае возвращается количество строк, в настоящее время кэшированных на клиенте.

parent должен всегда быть недопустимым индексом QModelIndex.

См. также canFetchMore() и QSqlDriver::hasFeature().

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

Реализует: QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).

Устанавливает заголовок горизонтального столбца для указанного role со значением value. Это полезно, если модель используется для отображения данных в представлении (например, QTableView).

Возвращает true , если orientation равен Qt::Horizontal и section относится к допустимому разделу; в противном случае возвращает false.

Обратите внимание, что этот метод не может использоваться для изменения значений в базе данных, так как модель является только для чтения.

См. также headerData() и data().

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

Защищённый метод, позволяющий производным классам установить значение последней ошибки, произошедшей в базе данных, равным error.

См. также lastError().

void QSqlQueryModel::setQuery(const QSqlQuery &query)

Сбрасывает модель и устанавливает поставщик данных в качестве заданного query. Обратите внимание, что запрос должен быть активным и не должен быть isForwardOnly().

lastError() может использоваться для получения подробной информации, если произошла ошибка при установке запроса.

Примечание: Вызов setQuery() удалит все вставленные столбцы.

См. также query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly() и lastError().

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

Это перегруженный метод.

Выполняет запрос query для заданного соединения базы данных db. Если база данных не указана (или указана недопустимая база данных), используется по умолчанию.

lastError() может использоваться для получения подробной информации, если произошла ошибка при установке запроса.

Пример:

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

См. также query(), queryChange() и lastError().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsqlquerymodel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API