Класс QSqlQueryModel
Класс QSqlQueryModel предоставляет модель данных только для чтения для наборов результатов SQL. Подробнее...
| Заголовок: | #include <QSqlQueryModel> |
| qmake: | QT += sql |
| Наследуется от: | QAbstractTableModel |
| Наследует: |
Открытые функции
| 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 является вторым столбцом (или индексом столбца 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()
Удаляет объект и освобождает выделенные ресурсы.
См. также очистить().
[override virtual] bool QSqlQueryModel::можноЗагрузитьБольше(const QModelIndex &parent = QModelIndex()) const
Переопределяет: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.
Возвращает true, если можно прочитать больше строк из базы данных. Это касается только баз данных, которые не сообщают размер запроса (см. QSqlDriver::hasFeature()).
parent всегда должен быть недействительным QModelIndex.
Функция была добавлена в Qt 4.1.
См. также загрузитьБольше().
[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.
Функция была добавлена в Qt 4.1.
См. также можноЗагрузитьБольше().
[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 выходит за границы или не указывает на значение в наборе результатов.
См. также 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] 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.
Этот метод был добавлен в Qt 4.1.
См. также 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-5.15/qsqlquerymodel.html