Spec-Zone.ru › Qt

Класс 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 clear()
QSqlError lastError() const
QSqlQuery query() const
QSqlRecord record(int row) const
QSqlRecord record() const
void setQuery(QSqlQuery &&query)
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

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

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

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

virtual QModelIndex indexInQuery(const QModelIndex &item) const
virtual void queryChange()
void setLastError(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.

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

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

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

QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)

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

[virtual] QSqlQueryModel::~QSqlQueryModel()

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

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

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

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

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

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

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

[virtual] void QSqlQueryModel::clear()

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

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

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

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

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

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

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

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

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

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

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

Чтобы принудительно извлечь весь набор результатов, можно использовать следующее:

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

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

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

Этот метод был добавлен в Qt 6.2.

См. также 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.2/qsqlquerymodel.html

Spec-Zone.ru

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