Spec-Zone.ru › Qt 5.11

Класс QSqlTableModel

Класс QSqlTableModel предоставляет редактируемую модель данных для одной таблицы базы данных. Подробнее...

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

QSqlRelationalTableModel

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

Типы публичного доступа

Перечисление EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }

Функции публичного доступа

QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
виртуальный ~QSqlTableModel()
QSqlDatabase database() const
QSqlTableModel::EditStrategy editStrategy() const
int fieldIndex(const QString &fieldName) const
QString filter() const
bool insertRecord(int row, const QSqlRecord &record)
bool isDirty(const QModelIndex &index) const
bool isDirty() const
QSqlIndex primaryKey() const
QSqlRecord record() const
QSqlRecord record(int row) const
виртуальный void revertRow(int row)
виртуальный void setEditStrategy(QSqlTableModel::EditStrategy strategy)
виртуальный void setFilter(const QString &filter)
bool setRecord(int row, const QSqlRecord &values)
виртуальный void setSort(int column, Qt::SortOrder order)
виртуальный void setTable(const QString &tableName)
QString tableName() const

Переопределённые функции публичного доступа

виртуальный void clear() override
виртуальный QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
виртуальный Qt::ItemFlags flags(const QModelIndex &index) const override
виртуальный QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
виртуальный bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
виртуальный bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
виртуальный bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
виртуальный int rowCount(const QModelIndex &parent = QModelIndex()) const override
виртуальный bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
виртуальный void sort(int column, Qt::SortOrder order) override
  • 17 функций публичного доступа унаследованных от QSqlQueryModel
  • 7 функций публичного доступа унаследованных от QAbstractTableModel
  • 43 функций публичного доступа унаследованных от QAbstractItemModel
  • 34 функций публичного доступа унаследованных от QObject

Слот публичного доступа

виртуальный void revert() override
void revertAll()
виртуальный bool select()
виртуальный bool selectRow(int row)
виртуальный bool submit() override
bool submitAll()
  • 2 слота публичного доступа унаследованных от QAbstractItemModel
  • 1 слот публичного доступа унаследованных от QObject

Сигналы

void beforeDelete(int row)
void beforeInsert(QSqlRecord &record)
void beforeUpdate(int row, QSqlRecord &record)
void primeInsert(int row, QSqlRecord &record)
  • 18 сигналов унаследованных от QAbstractItemModel
  • 2 сигналов унаследованных от QObject

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

virtual bool удалитьСтрокуИзТаблицы(int row)
virtual bool вставитьСтрокуВТаблицу(const QSqlRecord &values)
virtual QString сортировка() const
QSqlRecord первичныеЗначения(int row) const
virtual QString запросВыбора() const
void установитьПервичныйКлюч(const QSqlIndex &key)
void установитьЗапрос(const QSqlQuery &query)
virtual bool обновитьСтрокуВТаблице(int row, const QSqlRecord &values)

Реализованные защищённые функции

virtual QModelIndex индексВЗапросе(const QModelIndex &item) const override
  • 3 защищённых функции, унаследованные от QSqlQueryModel
  • 19 защищённых функций, унаследованные от QAbstractItemModel
  • 9 защищённых функций, унаследованные от QObject

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

  • 1 свойство, унаследованное от QObject
  • 1 публичная переменная, унаследованная от QAbstractTableModel
  • 1 публичная переменная, унаследованная от QAbstractItemModel
  • 1 публичная переменная, унаследованная от QObject
  • 2 статические публичные члены, унаследованные от QAbstractTableModel
  • 2 статических публичных члена, унаследованные от QAbstractItemModel
  • 10 статических публичных членов, унаследованных от QObject
  • 1 защищённый слот, унаследованный от QAbstractItemModel
  • 2 защищённых переменных, унаследованные от QObject

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

Класс QSqlTableModel предоставляет редактируемую модель данных для одной таблицы базы данных.

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

    QSqlTableModel *model = new QSqlTableModel(parentObject, database);
    model->setTable("employee");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

    QTableView *view = new QTableView;
    view->setModel(model);
    view->hideColumn(0); // don't show the ID
    view->show();

Мы задаём имя SQL-таблицы и стратегию редактирования, а затем настраиваем метки, отображаемые в заголовках представления. Стратегия редактирования определяет, когда изменения, внесённые пользователем в представлении, фактически применяются к базе данных. Возможные значения — OnFieldChange, OnRowChange и OnManualSubmit.

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

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

В приведенном фрагменте кода извлекается поле salary из записи 4 в наборе результатов запроса SELECT * from employee.

Можно задавать фильтры с помощью setFilter() или изменять порядок сортировки с помощью setSort(). В конце необходимо вызвать select() для заполнения модели данными.

Пример tablemodel иллюстрирует, как использовать QSqlTableModel в качестве источника данных для QTableView.

QSqlTableModel не поддерживает напрямую внешние ключи. Используйте QSqlRelationalTableModel и QSqlRelationalDelegate, если вам нужно разрешить внешние ключи.

См. также QSqlRelationalTableModel, QSqlQuery, Модель/Представление, Пример модели таблицы и Пример кэшированной таблицы.

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

перечисление QSqlTableModel::EditStrategy

Это перечисление определяет стратегию редактирования значений в базе данных.

Постоянная Значение Описание
QSqlTableModel::OnFieldChange 0 Все изменения в модели будут немедленно применяться к базе данных.
QSqlTableModel::OnRowChange 1 Изменения в строке будут применяться при выборе другой строки.
QSqlTableModel::OnManualSubmit 2 Все изменения будут кэшироваться в модели до тех пор, пока не будет вызвано submitAll() или revertAll().

Примечание: для предотвращения вставки в базу данных только частично инициализированных строк, OnFieldChange будет вести себя как OnRowChange для вновь вставленных строк.

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

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

QSqlTableModel::QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())

Создаёт пустую модель QSqlTableModel и задаёт родителя parent и подключение к базе данных db. Если db не валидно, будет использоваться подключение по умолчанию.

Стратегия редактирования по умолчанию — OnRowChange.

[virtual] QSqlTableModel::~QSqlTableModel()

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

[signal] void QSqlTableModel::beforeDelete(int row)

Этот сигнал излучается deleteRowFromTable() перед удалением строки row из активной таблицы базы данных.

[signal] void QSqlTableModel::beforeInsert(QSqlRecord &record)

Этот сигнал излучается insertRowIntoTable() перед вставкой новой строки в активную таблицу базы данных. Значения, которые собираются вставить, хранятся в record и могут быть изменены перед вставкой.

[signal] void QSqlTableModel::beforeUpdate(int row, QSqlRecord &record)

Этот сигнал излучается updateRowInTable() перед обновлением строки row в активной таблице базы данных значениями из record.

Обратите внимание, что будут обновлены только значения, помеченные как сгенерированные. Флаг generated можно задать с помощью QSqlRecord::setGenerated() и проверить с помощью QSqlRecord::isGenerated().

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

[override virtual] void QSqlTableModel::clear()

Переопределено из QSqlQueryModel::clear().

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

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

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

QSqlDatabase QSqlTableModel::database() const

Возвращает подключение к базе данных модели.

[virtual protected] bool QSqlTableModel::deleteRowFromTable(int row)

Удаляет заданную строку row из активной таблицы базы данных.

Это метод низкого уровня, который работает напрямую с базой данных и не должен вызываться напрямую. Используйте removeRow() или removeRows() для удаления значений. Модель определит, когда следует изменить базу данных, в зависимости от её стратегии редактирования.

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

См. также removeRow() и removeRows().

QSqlTableModel::EditStrategy QSqlTableModel::editStrategy() const

Возвращает текущую стратегию редактирования.

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

int QSqlTableModel::fieldIndex(const QString &fieldName) const

Возвращает индекс поля fieldName, или -1, если соответствующее поле отсутствует в модели.

QString QSqlTableModel::filter() const

Возвращает текущий установленный фильтр.

См. также setFilter() и select().

[override virtual] Qt::ItemFlags QSqlTableModel::flags(const QModelIndex &index) const

Переопределено из QAbstractTableModel::flags().

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

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

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

Переопределено из QSqlQueryModel::indexInQuery().

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

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

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

См. также QSqlQueryModel::indexInQuery().

bool QSqlTableModel::insertRecord(int row, const QSqlRecord &record)

Вставляет record в позицию row. Если row отрицательное, запись будет добавлена в конец. Вызывает insertRows() и setRecord() внутри.

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

Изменения отправляются немедленно для OnFieldChange и OnRowChange. Ошибка не оставляет новую строку в модели.

См. также insertRows(), removeRows(), и setRecord().

[virtual protected] bool QSqlTableModel::insertRowIntoTable(const QSqlRecord &values)

Вставляет значения values в текущую активную таблицу базы данных.

Это метод низкого уровня, который работает непосредственно с базой данных и не должен вызываться напрямую. Используйте insertRow() и setData() для вставки значений. Модель сама решит, когда изменять базу данных, в зависимости от своей стратегии редактирования.

Возвращает true если значения были вставлены, в противном случае false. Информацию об ошибках можно получить с помощью lastError().

См. также lastError(), insertRow() и insertRows().

[override virtual] bool QSqlTableModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

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

Вставляет count пустых строк в позицию row. Обратите внимание, что parent должна быть недействительной, так как эта модель не поддерживает родительско-дочерние отношения.

Для стратегий редактирования OnFieldChange и OnRowChange может быть вставлена только одна строка за раз, и в модели не может быть других кэшированных изменений.

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

Не отправляет строки, независимо от стратегии редактирования.

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

См. также primeInsert() и insertRecord().

bool QSqlTableModel::isDirty(const QModelIndex &index) const

Возвращает true если значение по индексу index несохранено, в противном случае false. Несохраненные значения — это значения, которые были изменены в модели, но ещё не записаны в базу данных.

Если index недействительна или указывает на несуществующую строку, возвращается false.

bool QSqlTableModel::isDirty() const

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

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

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

[virtual protected] QString QSqlTableModel::orderByClause() const

Возвращает SQL ORDER BY условие, основанное на текущем порядке сортировки.

См. также setSort() и selectStatement().

QSqlIndex QSqlTableModel::primaryKey() const

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

См. также setTable(), setPrimaryKey() и QSqlDatabase::primaryIndex().

[protected] QSqlRecord QSqlTableModel::primaryValues(int row) const

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

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

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

[signal] void QSqlTableModel::primeInsert(int row, QSqlRecord &record)

Этот сигнал испускается insertRows(), когда инициализируется вставка в заданной строке row текущей активной таблицы базы данных. Параметр record можно изменять (поскольку это ссылка), например, для заполнения некоторых полей значениями по умолчанию и установки сгенерированных флагов полей. Не пытайтесь изменять запись другими способами, такими как setData() или setRecord(), при обработке этого сигнала.

QSqlRecord QSqlTableModel::record() const

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

Возвращает пустую запись, содержащую только имена полей. Этот метод можно использовать для извлечения имён полей записи.

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

QSqlRecord QSqlTableModel::record(int row) const

Возвращает запись в строке row модели.

Если row — индекс допустимой строки, запись будет заполнена значениями из этой строки.

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

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

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

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

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

Удаляет count столбцов из модели parent, начиная с индекса column.

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

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

[override virtual] bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

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

Удаляет count строк, начиная со строки row. Поскольку эта модель не поддерживает иерархические структуры, parent должна быть недействительным индексом модели.

Когда стратегия редактирования — OnManualSubmit, удаление строк из базы данных откладывается до вызова submitAll().

Для OnFieldChange и OnRowChange может быть удалена только одна строка за раз и только если у другой строки нет кэшированных изменений. Удаления отправляются в базу данных немедленно. Модель сохраняет пустую строку для успешно удаленной строки до обновления с помощью select().

После неудаленного удаления операция не отменяется в модели. Приложение может повторно отправить или отменить.

Вставленные, но ещё не успешно отправленные строки в удаляемом диапазоне немедленно удаляются из модели.

END_OF_DOCUMENT_MARKER

Перед удалением строки из базы данных, испускается сигнал beforeDelete().

Если строка < 0 или строка + количество > rowCount(), никаких действий не выполняется и возвращается false. Возвращает true , если все строки были удалены; в противном случае возвращает false. Подробную информацию об ошибке базы данных можно получить, используя lastError().

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

[override virtual slot] void QSqlTableModel::revert()

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

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

Возвращает изменения, если стратегия модели установлена в OnRowChange или OnFieldChange. Не делает ничего для стратегии OnManualSubmit.

Используйте revertAll() для отмены всех ожидаемых изменений для стратегии OnManualSubmit или revertRow() для отмены конкретной строки.

См. также submit(), submitAll(), revertRow() и revertAll().

[slot] void QSqlTableModel::revertAll()

Отменяет все ожидаемые изменения.

См. также revert(), revertRow() и submitAll().

[virtual] void QSqlTableModel::revertRow(int row)

Отменяет все изменения для указанной строки row.

См. также revert(), revertAll(), submit() и submitAll().

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

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

[virtual slot] bool QSqlTableModel::select()

Заполняет модель данными из таблицы, которая была установлена с помощью setTable(), используя указанный фильтр и условие сортировки, и возвращает true в случае успеха; в противном случае возвращает false.

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

См. также setTable(), setFilter() и selectStatement().

[virtual slot] bool QSqlTableModel::selectRow(int row)

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

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

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

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

[virtual protected] QString QSqlTableModel::selectStatement() const

Возвращает SQL SELECT-запрос, используемый внутри для заполнения модели. Запрос включает фильтр и ORDER BY-оператор.

См. также filter() и orderByClause().

[override virtual] bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

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

Устанавливает данные для элемента index для роли role на value.

Для стратегии редактирования OnFieldChange, индекс может получить изменение только в том случае, если ни один другой индекс не имеет кэшированного изменения. Изменения отправляются немедленно. Однако строки, которые ещё не были вставлены в базу данных, могут быть изменены свободно и не отправляются автоматически. Отправленные изменения не отменяются при ошибке.

Для OnRowChange, индекс может получить изменение только в том случае, если ни одна другая строка не имеет кэшированного изменения. Изменения не отправляются автоматически.

Возвращает true , если value равно текущему значению. Однако значение не будет отправлено в базу данных.

Возвращает true , если значение может быть установлено или false при ошибке, например, если index выходит за пределы допустимых значений.

См. также editStrategy(), data(), submit(), submitAll() и revertRow().

[virtual] void QSqlTableModel::setEditStrategy(QSqlTableModel::EditStrategy strategy)

Устанавливает стратегию редактирования значений в базе данных на strategy.

Это приведет к отмене всех ожидаемых изменений.

См. также editStrategy() и revertAll().

[virtual] void QSqlTableModel::setFilter(const QString &filter)

Устанавливает текущий фильтр на filter.

Фильтр представляет собой SQL WHERE-оператор без ключевого слова WHERE (например, name='Josephine')).

Если модель уже заполнена данными из базы данных, модель повторно выбирает данные с новым фильтром. В противном случае фильтр будет применён при следующем вызове select().

См. также filter(), select(), selectStatement() и orderByClause().

[protected] void QSqlTableModel::setPrimaryKey(const QSqlIndex &key)

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

Обычно первичный индекс устанавливается автоматически при вызове setTable().

См. также primaryKey() и QSqlDatabase::primaryIndex().

[protected] void QSqlTableModel::setQuery(const QSqlQuery &query)

Эта функция просто вызывает QSqlQueryModel::setQuery(query). Обычно её не следует вызывать для QSqlTableModel. Вместо этого используйте setTable(), setSort(), setFilter() и т.д. для настройки запроса.

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

bool QSqlTableModel::setRecord(int row, const QSqlRecord &values)

Применяет values к строке row в модели. Источник и целевые поля сопоставляются по имени поля, а не по позиции в записи.

Обратите внимание, что сгенерированные флаги в values сохраняются для определения того, используются ли соответствующие поля при отправке изменений в базу данных. По умолчанию он установлен в true для всех полей в QSqlRecord. Вы должны установить флаг в false с помощью setGenerated(false) для любого значения в values, чтобы сохранить изменения обратно в базу данных.

Для стратегий редактирования OnFieldChange и OnRowChange, строка может получить изменение только в том случае, если ни одна другая строка не имеет кэшированного изменения. Изменения отправляются немедленно. Отправленные изменения не отменяются при ошибке.

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

См. также record() и editStrategy().

[virtual] void QSqlTableModel::setSort(int column, Qt::SortOrder order)

Устанавливает порядок сортировки для column на order. Это не влияет на текущие данные, для обновления данных с новым порядком сортировки вызовите select().

См. также sort(), select() и orderByClause().

[virtual] void QSqlTableModel::setTable(const QString &tableName)

Устанавливает таблицу базы данных, с которой работает модель, на tableName. Не выбирает данные из таблицы, а получает информацию о её полях.

Для заполнения модели данными таблицы вызовите select().

Информация об ошибке может быть получена с помощью lastError().

См. также select(), setFilter() и lastError().

END_OF_DOCUMENT_MARKER

[override virtual] void QSqlTableModel::sort(int column, Qt::SortOrder order)

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

Сортирует данные по column в порядке order. Это немедленно выберет данные, используйте setSort(), чтобы установить порядок сортировки без заполнения модели данными.

См. также setSort(), select() и orderByClause().

[override virtual slot] bool QSqlTableModel::submit()

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

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

Отправляет на сохранение текущую редактируемую строку, если стратегия модели установлена в OnRowChange или OnFieldChange. Ничего не делает для стратегии OnManualSubmit.

Используйте submitAll(), чтобы отправить все ожидающие изменения для стратегии OnManualSubmit.

Возвращает true при успехе; в противном случае возвращает false. Используйте lastError(), чтобы получить подробную информацию об ошибке.

Не перестраивает модель автоматически. Сохранённые строки обновляются из базы данных при успехе.

См. также revert(), revertRow(), submitAll(), revertAll() и lastError().

[slot] bool QSqlTableModel::submitAll()

Отправляет все ожидающие изменения и возвращает true при успехе. Возвращает false при ошибке, подробную информацию об ошибке можно получить с помощью lastError().

В стратегии OnManualSubmit, при успехе модель будет перезаполнена. Любые представления, отображающие её, потеряют свой выбор.

Примечание: в режиме OnManualSubmit уже сохранённые изменения не будут удалены из кэша, если submitAll() завершится ошибкой. Это позволяет отменять транзакции и повторно отправлять их без потери данных.

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

QString QSqlTableModel::tableName() const

Возвращает имя текущей выбранной таблицы.

[virtual protected] bool QSqlTableModel::updateRowInTable(int row, const QSqlRecord &values)

Обновляет заданную row в текущей активной таблице базы данных с указанными values. Возвращает true при успехе; в противном случае возвращает false.

Этот метод низкого уровня работает непосредственно с базой данных и не должен вызываться напрямую. Используйте setData(), чтобы обновить значения. Модель будет принимать решение, когда модифицировать базу данных, в зависимости от своей стратегии редактирования.

Обратите внимание, что обновляются только значения, для которых установлен флаг generated. Флаг generated можно установить с помощью QSqlRecord::setGenerated() и проверить с помощью QSqlRecord::isGenerated().

См. также QSqlRecord::isGenerated() и setData().

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

Spec-Zone.ru

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