Spec-Zone.ru › Qt 5.9

Класс QSqlQueryModel

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

Заголовок: #include <QSqlQueryModel>
qmake: QT += sql
Наследуется от: QAbstractTableModel
Наследует:

QSqlTableModel

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

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

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

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

virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const
virtual int columnCount(const QModelIndex &index = QModelIndex()) const
virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const
virtual void fetchMore(const QModelIndex &parent = QModelIndex())
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
  • 4 открытые функции унаследованы от QAbstractTableModel
  • 39 открытых функций унаследованы от QAbstractItemModel
  • 32 открытых функции унаследованы от QObject

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

virtual QModelIndex indexInQuery(const QModelIndex &item) const
virtual void queryChange()
void setLastError(const QSqlError &error)
  • 19 защищённых функций унаследованы от QAbstractItemModel
  • 9 защищённых функций унаследованы от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 2 открытых слотов унаследовано от QAbstractItemModel
  • 1 открытый слот унаследован от QObject
  • 18 сигналов унаследовано от QAbstractItemModel
  • 2 сигнала унаследовано от QObject
  • 11 статических открытых членов унаследовано от QObject
  • 1 защищённый слот унаследован от QAbstractItemModel

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

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

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 также может использоваться для программированного доступа к базе данных без привязки к представлению:

    QSqlTableModel model;
    model.setTable("employee");
    model.select();
    int salary = model.record(4).value("salary").toInt();

Приведённый выше фрагмент кода извлекает поле salary из записи 4 в наборе результатов запроса SELECT * from employee. Предполагая, что salary является столбцом 2, мы можем переписать последнюю строку следующим образом:

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

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

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

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

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

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

QSqlQueryModel::QSqlQueryModel(QObject *parent = Q_NULLPTR)

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

[virtual] QSqlQueryModel::~QSqlQueryModel()

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

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

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

Переопределено из QAbstractItemModel::canFetchMore().

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

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

Эта функция была добавлена в Qt 4.1.

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

[virtual] void QSqlQueryModel::clear()

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

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

Переопределено из QAbstractItemModel::columnCount().

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

Переопределено из QAbstractItemModel::data().

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

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

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

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

Переопределено из QAbstractItemModel::fetchMore().

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

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

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

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

Эта функция была введена в Qt 4.1.

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

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

Переопределено из QAbstractItemModel::headerData().

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

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

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

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

Значение возврата идентично элементу, если не было вставлено, удалено или перемещено столбцов или строк.

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

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

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

Переопределено из QAbstractItemModel::insertColumns().

Вставляет 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().

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

Переопределено из QAbstractItemModel::removeColumns().

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

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

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

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

Переопределено из QAbstractItemModel::rowCount().

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

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

Эта функция была введена в Qt 4.1.

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

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

Переопределено из QAbstractItemModel::setHeaderData().

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

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

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

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

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

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

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

void QSqlQueryModel::setQuery(const QSqlQuery &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-5.9/qsqlquerymodel.html

Spec-Zone.ru

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