Spec-Zone.ru › Qt 5.9

Класс QSqlTableModel

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

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

QSqlRelationalTableModel

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

Открытые типы

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

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

QSqlTableModel(QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase())
виртуальный ~QSqlTableModel()
QSqlDatabase database() const
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(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()
виртуальный QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
виртуальный Qt::ItemFlags flags(const QModelIndex &index) const
виртуальный QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
виртуальный bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
виртуальный bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
виртуальный bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
виртуальный int rowCount(const QModelIndex &parent = QModelIndex()) const
виртуальный bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
виртуальный void sort(int column, Qt::SortOrder order)
  • 16 открытых функций унаследованных от QSqlQueryModel
  • 4 открытых функции унаследованных от QAbstractTableModel
  • 39 открытых функций унаследованных от QAbstractItemModel
  • 32 открытых функций унаследованных от QObject

Открытые слоты

виртуальный void revert()
void revertAll()
виртуальный bool select()
виртуальный bool selectRow(int row)
виртуальный bool submit()
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 deleteRowFromTable(int row)
virtual bool insertRowIntoTable(const QSqlRecord &values)
virtual QString orderByClause() const
QSqlRecord primaryValues(int row) const
virtual QString selectStatement() const
void setPrimaryKey(const QSqlIndex &key)
void setQuery(const QSqlQuery &query)
virtual bool updateRowInTable(int row, const QSqlRecord &values)

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

virtual QModelIndex indexInQuery(const QModelIndex &item) const
  • 3 protected functions inherited from QSqlQueryModel
  • 19 protected functions inherited from QAbstractItemModel
  • 9 protected functions inherited from QObject

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

  • 1 свойство унаследованное от QObject
  • 11 статические public члены унаследованные от QObject
  • 1 защищённый слот унаследованный от QAbstractItemModel

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

Класс 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, Программирование модели/представления, Пример модели таблицы и Пример кэшированной таблицы.

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

enum QSqlTableModel::EditStrategy

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

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

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

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

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

QSqlTableModel::QSqlTableModel(QObject *parent = Q_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.

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

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

[virtual] void QSqlTableModel::clear()

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

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

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

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

QSqlDatabase QSqlTableModel::database() const

Возвращает соединение с базой данных модели.

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

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

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

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

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

EditStrategy QSqlTableModel::editStrategy() const

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

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

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

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

QString QSqlTableModel::filter() const

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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

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

Реализовано повторно из QAbstractItemModel::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().

[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(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 сохраняются и определяют, используются ли соответствующие поля при отправке изменений в базу данных. Вызывающий должен помнить о том, чтобы установить сгенерированный флаг в FALSE для полей, где значения должны быть получены из базы данных, таких как автоматически увеличивающийся идентификатор.

Для стратегий редактирования 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().

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

Реализовано повторно из QAbstractItemModel::sort().

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

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

[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/qt-5.9/qsqltablemodel.html

Spec-Zone.ru

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