Класс QSqlQueryModel
Класс QSqlQueryModel предоставляет модель данных только для чтения для наборов результатов SQL. Подробнее...
| Заголовок: | #include <QSqlQueryModel> |
| qmake: | QT += sql |
| Наследуется от: | QAbstractTableModel |
| Наследует: |
Открытые функции
| 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(const 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 |
- 7 открытых функций унаследованных от QAbstractTableModel
- 43 открытых функции унаследованных от QAbstractItemModel
- 34 открытых функции унаследованных от 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
- 1 открытая переменная унаследованная от QAbstractTableModel
- 1 открытая переменная унаследованная от QAbstractItemModel
- 1 открытая переменная унаследованная от QObject
- 2 статических открытых членов унаследованных от QAbstractTableModel
- 2 статических открытых членов унаследованных от QAbstractItemModel
- 10 статических открытых членов унаследованных от QObject
- 1 защищенный слот унаследованный от QAbstractItemModel
- 2 защищенных переменных унаследованных от QObject
Подробное описание
Класс 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 = nullptr)
Создаёт пустую модель QSqlQueryModel с заданным parent.
[virtual] QSqlQueryModel::~QSqlQueryModel()
Удаляет объект и освобождает все выделенные ресурсы.
См. также clear().
[override virtual] bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const
Переопределено из QAbstractItemModel::canFetchMore().
Возвращает true, если можно прочитать больше строк из базы данных. Это относится только к базам данных, которые не сообщают размер запроса (см. QSqlDriver::hasFeature()).
parent всегда должен быть невалидным QModelIndex.
Функция была введена в Qt 4.1.
См. также fetchMore().
[virtual] void QSqlQueryModel::clear()
Очищает модель и освобождает все полученные ресурсы.
[override virtual] int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const
Переопределено из QAbstractItemModel::columnCount().
[override virtual] QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const
Переопределено из QAbstractItemModel::data().
Возвращает значение для указанного item и role.
Если item находится вне границ или произошла ошибка, возвращается недействительный QVariant.
См. также lastError().
[override virtual] void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())
Переопределено из QAbstractItemModel::fetchMore().
Загружает дополнительные строки из базы данных. Это касается только баз данных, которые не сообщают размер запроса (см. QSqlDriver::hasFeature()).
Чтобы принудительно загрузить весь результат, вы можете использовать следующее:
while (myModel->canFetchMore())
myModel->fetchMore(); parent всегда должен быть недействительным QModelIndex.
Эта функция была добавлена в Qt 4.1.
См. также canFetchMore().
[override virtual] QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Переопределено из QAbstractItemModel::headerData().
Возвращает данные заголовка для заданного 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().
Вставляет 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().
Удаляет count столбцов из модели, начиная с позиции column. Параметр parent всегда должен быть недействительным QModelIndex, так как модель не поддерживает родительско-дочерние отношения.
Удаление столбцов фактически скрывает их. Оно не влияет на базовый QSqlQuery.
Возвращает true если столбцы были удалены; в противном случае возвращает false.
[override virtual] QHash<int, QByteArray> QSqlQueryModel::roleNames() const
Переопределено из QAbstractItemModel::roleNames().
Возвращает имена ролей модели.
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().
Если база данных поддерживает возврат размера запроса (см. 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().
Устанавливает заголовок горизонтального заголовка для указанного 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().
END_OF_DOCUMENT_MARKERvoid 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/archives/qt-5.11/qsqlquerymodel.html