Описание класса QSqlTableModelКласс QSqlTableModel предоставляет редактируемую модель данных для одной таблицы базы данных. Далее... #include <QSqlTableModel> Унаследован от: QSqlQueryModel. От него наследуется: QSqlRelationalTableModel. Открытые типы
Открытые функции
Переопределённые открытые функции
Открытые слоты
Сигналы
Защищенные функции
Дополнительные унаследованные члены
Подробное описаниеКласс 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); // не показывать ID view->show(); Мы устанавливаем имя SQL таблицы и стратегию редактирования, затем мы устанавливаем метки отображаемые в заголовках представления. Стратегия редактирования предписывает, когда изменения сделанные пользователем в представлении применяются в базе данных. Возможные значения стратегии - это OnFieldChange, OnRowChange и OnManualSubmit. QSqlTableModel может быть также использован для доступа к базе данных программно, без связывания ее с представлением: QSqlQueryModel model; model.setQuery("SELECT * FROM employee"); int salary = model.record(4).value("salary").toInt(); Фрагмент кода выше извлекает поле salary из четвёртой записи, выбранной по запросу SELECT * from employee. Имеется возможность установить фильтры, используя setFilter(), или изменить порядок сортировки с помощью setSort(). В конце вы должны вызвать select(), чтобы заполнить модель данными. Пример sql/tablemodel иллюстрирует, как использовать QSqlTableModel в качестве источника данных для QTableView. QSqlTableModel не предоставляет непосредственную поддержку внешних ключей. Если вы хотите разрешить внешние ключи, используйте QSqlRelationalTableModel и QSqlRelationalDelegate. Смотрите также QSqlRelationalTableModel, QSqlQuery, Программирование модель/представление, Пример "Table Model" и Пример "Cached Table". Описание типов-членовenum QSqlTableModel::EditStrategyДанное перечисление определяет, какую стратегию выбрать когда редактируются значения в базе данных.
Замечание: Для предотвращения внесения только частично заполненных строк в БД, OnFieldChange будет вести себя как OnRowChange для вновь добавленных строк. Смотрите также setEditStrategy(). Описание функций-членовQSqlTableModel::QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )Создаёт пустую QSqlTableModel и устанавливает значение предка в parent, а соединения к БД в db. Если db не является корректным, используется соединение по умолчанию. Стратегия редактирования по умолчанию - OnRowChange. QSqlTableModel::~QSqlTableModel () [virtual]Удаляет объект и освобождает все выделенные ему ресурсы. void QSqlTableModel::beforeDelete ( int row ) [signal]Этот сигнал испускается deleteRowFromTable() перед удалением записи row из текущей активной таблицы базы данных. void QSqlTableModel::beforeInsert ( QSqlRecord & record ) [signal]Данный сигнал испускается insertRowIntoTable() перед вставкой новой строки в текущую активную таблицу базы данных. Значение, которые будут вставлены, хранятся в record и могут быть изменены перед этой операцией. void QSqlTableModel::beforeUpdate ( int row, QSqlRecord & record ) [signal]Данный сигнал испускается updateRowInTable() перед обновлением записи row в текущей активной таблице базы данных значениями из record. Помните, что только помеченные как генерируемые значения будут обновлены. Флаг, отвечающий за то, являются ли данные генерируемыми, может быть установлен с помощью QSqlRecord::setGenerated() и проверен посредством QSqlRecord::isGenerated(). Смотрите также QSqlRecord::isGenerated(). void QSqlTableModel::clear () [virtual]Переопределено из QSqlQueryModel::clear(). QVariant QSqlTableModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const [virtual]Переопределено из QAbstractItemModel::data(). Смотрите также setData(). QSqlDatabase QSqlTableModel::database () constВозвращает указатель на используемую QSqlDatabase или 0, если БД не установлена. bool QSqlTableModel::deleteRowFromTable ( int row ) [virtual protected]Удаляет заданную строку 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(). Qt::ItemFlags QSqlTableModel::flags ( const QModelIndex & index ) const [virtual]Переопределено из QAbstractItemModel::flags(). QVariant QSqlTableModel::headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const [virtual]Переопределено из QAbstractItemModel::headerData(). QModelIndex QSqlTableModel::indexInQuery ( const QModelIndex & item ) const [protected]Возвращает индекс значения в результате, полученном для элемента item модели. Вернёт значение, равное item, если вокруг нет столбцов или строк для вставки, удаления или перемещения. Возвращает неправильный индекс модели, если item выходит за границы или если item не является указателем на значение в результирующем наборе. Смотрите также QSqlQueryModel::indexInQuery(). bool QSqlTableModel::insertRecord ( int row, const QSqlRecord & record )Вставляет record после row. Если row отрицателен, запись будет помещена в конец. Внутри вызываются insertRows() и setRecord(). Возвращает true, если строка была вставлена, в противном случае возвращает false. Смотрите также insertRows() и removeRows(). bool QSqlTableModel::insertRowIntoTable ( const QSqlRecord & values ) [virtual protected]Вставляет значения values в текущую активную таблицу базы данных. Это низкоуровневый метод, который используется только при непосредственной работе с БД, не стоит вызывать его напрямую. Для вставки значений используйте insertRow() и setData(). Модель выбирает в зависимости от текущей стратегии редактирования, когда изменять БД. Возвращает true, если значения могут быть вставлены, в противном случае возвращает false. Информация об ошибке может быть доступна с помощью lastError(). Смотрите также lastError(), insertRow() и insertRows(). bool QSqlTableModel::insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) [virtual]Переопределено из QAbstractItemModel::insertRows(). Вставляет count пустых строк, начиная с позиции row. Помните, что parent должен быть неправильным, так как модель не поддерживает связей предок-потомок. Только одна запись может быть вставлена, если используется OnFieldChange или OnRowChange стратегия обновления. Сигнал primeInsert() испускается для каждой новой строки. Соединяйтесь с ним, если вы хотите заполнить новые записи значениями по умолчанию. Возвращает false, если параметры выходят за границы допустимого; в противном случае возвращает true. Смотрите также primeInsert() и insertRecord(). bool QSqlTableModel::isDirty ( const QModelIndex & index ) constВозвращает true, если значения по индексу index неактуальные (dirty), в противном случае возвращается false. Неактуальные значения - это те, которые были изменены в модели, но ещё не записаны в БД. Если index неверен или указывает на несуществующую запись, возвращается false. QString QSqlTableModel::orderByClause () const [virtual protected]Возвращает SQL оператор ORDER BY, основанный на текущих установках сортировки. Смотрите также setSort() и selectStatement(). QSqlIndex QSqlTableModel::primaryKey () constВозвращает первичный ключ текущей таблицы или пустой QSqlIndex, если в таблице нет первичного ключа. Смотрите также setTable(), setPrimaryKey() и QSqlDatabase::primaryIndex(). void QSqlTableModel::primeInsert ( int row, QSqlRecord & record ) [signal]Данный сигнал испускается insertRows() при вставке переданной записи row в текущую активную таблицу базы данных. Параметр record может быть изменён (так как это ссылка), например, для заполнения некоторых полей значениями по умолчанию. bool QSqlTableModel::removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) [virtual]Переопределено из QAbstractItemModel::removeColumns(). Удаляет count столбцов из модели parent, начиная с индекса column. Возвращает true, если столбцы были удалены; в противном случае возвращает false. Смотрите также removeRows(). bool QSqlTableModel::removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) [virtual]Переопределено из QAbstractItemModel::removeRows(). Удаляет count строк, начиная с row. Так как эта модель не поддерживает иерархические структуры, parent должен быть недействительным индексом в модели. Испускает сигнал beforeDelete() до того, как произойдёт удаление. Когда стратегией редактирования является OnManualSubmit испускание сигнала задерживается до вызова submitAll(). Возвращает true, если все строки могут быть удалены; противном случае возвращает false. Детализированную информацию об ошибке можно получить с помощью lastError(). Смотрите также removeColumns() и insertRows(). void QSqlTableModel::revert () [virtual slot]Переопределено из QAbstractItemModel::revert(). Этот переопределённый слот вызывается элементами делегатов, когда пользователь завершает редактирование текущей строки. Отменяет изменения, если текущая стратегия модели - OnRowChange. При других стратегиях ничего не делает. Используйте revertAll() для отмены всех изменений для стратегии OnManualSubmit или revertRow() для отмены изменения определённой записи. Смотрите также submit(), submitAll(), revertRow() и revertAll(). void QSqlTableModel::revertAll () [slot]Отменяет все сделанные изменения. Смотрите также revert(), revertRow() и submitAll(). void QSqlTableModel::revertRow ( int row ) [virtual]Отменяет все сделанные изменения для определённой строки row. Смотрите также revert(), revertAll(), submit() и submitAll(). int QSqlTableModel::rowCount ( const QModelIndex & parent = QModelIndex() ) const [virtual]Переопределено из QAbstractItemModel::rowCount(). bool QSqlTableModel::select () [virtual]Заполняет модель данными из таблицы, установленной с помощью setTable(), используя специальный фильтр и сортировку, при успехе возвращает true; в противном случае возвращает false. Замечание: Вызов select() вернёт к предыдущему состоянию все непереданные изменения и удалит все вставленные столбцы. Смотрите также setTable(), setFilter() и selectStatement(). QString QSqlTableModel::selectStatement () const [virtual protected]Возвращает результат выполнения SQL запроса SELECT, используется внутри для заполнения модели. Этот запрос включает в себя фильтр и ORDER BY. Смотрите также filter() и orderByClause(). bool QSqlTableModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ) [virtual]Переопределено из QAbstractItemModel::setData(). Устанавливает данные для элемента index и роли role в value. В зависимости от стратегии редактирования, значение может быть применено к БД или к кэшированной модели. Возвращает true, если значение может быть установлено, и false в случае ошибки, например, если index выходит за пределы границы значений. Смотрите также editStrategy(), data(), submit(), submitAll() и revertRow(). void QSqlTableModel::setEditStrategy ( EditStrategy strategy ) [virtual]Устанавливает стратегию редактирования значений БД в strategy. Это отменит любые не применённые изменения. Смотрите также editStrategy() и revertAll(). void QSqlTableModel::setFilter ( const QString & filter ) [virtual]Устанавливает текущий фильтр в filter. Фильтр является SQL выражением WHERE без ключевого слова WHERE (например, name='Josephine'). Если модель уже заполнена данными из БД, модель перевыберет их с учётом нового фильтра. В противном случае, фильтр будет применён при следующем вызове select(). Смотрите также filter(), select(), selectStatement() и orderByClause(). void QSqlTableModel::setPrimaryKey ( const QSqlIndex & key ) [protected]Защищённый метод, позволяющий классам-потомкам устанавливать первичный ключ в key. Обычно первичный ключ устанавливается автоматически каждый раз, когда вы вызываете setTable(). Смотрите также primaryKey() и QSqlDatabase::primaryIndex(). void QSqlTableModel::setQuery ( const QSqlQuery & query ) [protected]Эта функция просто вызывает QSqlQueryModel::setQuery(query). Вы не должны, как правило, вызывать её для QSqlTableModel. Вместо этого используйте setTable(), setSort(), setFilter() и т.д. для создания запроса. Смотрите также selectStatement(). bool QSqlTableModel::setRecord ( int row, const QSqlRecord & record )Устанавливает значения записи row в record. Возвращает true, если значения могут быть установлены; в противном случае возвращает false. Смотрите также record(). void QSqlTableModel::setSort ( int column, Qt::SortOrder order ) [virtual]Устанавливает порядок сортировки для столбца column в order. Не влияет на текущие данные, для обновления данных с использованием изменённого порядка сортировки вызовите select(). Смотрите также sort(), select() и orderByClause(). void QSqlTableModel::setTable ( const QString & tableName ) [virtual]Устанавливает таблицу БД, с которой работает модель, в tableName. Не делает выборки данных, но получает информацию о них. Для заполнения модели данными таблицы вызовите select(). Информация об ошибке может быть доступна с помощью lastError(). Смотрите также select(), setFilter() и lastError(). void QSqlTableModel::sort ( int column, Qt::SortOrder order ) [virtual]Переопределено из QAbstractItemModel::sort(). Сортирует данные по столбцу column в порядке order. Будет применено непосредственно к данным, используйте setSort() для установки порядка сортировки без заполнения модели данными. Смотрите также setSort(), select() и orderByClause(). bool QSqlTableModel::submit () [virtual slot]Переопределено из QAbstractItemModel::submit(). Переопределённый слот, вызывается делегатом элемента, когда пользователь заканчивает редактировать текущую строку. Применяет текущую редактируемую строку, если установлена стратегия редактирования OnRowChange или OnFieldChange. При стратегии OnManualSubmit ничего не происходит. Использует submitAll() для применения всех совершённых изменений для стратегии OnManualSubmit. Возвращает true, если всё прошло успешно; в противном случае возвращает false. Используйте lastError() для получения доступа к информации об ошибках. В случае успеха модель будет заполнена заново. Все представления, связанные с ней, потеряют свои выделения. Смотрите также revert(), revertRow(), submitAll(), revertAll() и lastError(). bool QSqlTableModel::submitAll () [slot]Применяет все сделанные изменения и возвращает true в случае успеха. Возвращает false, если случилась ошибка, информацию о ней вы сможете получить с помощью lastError(). В случае успеха модель будет заполнена заново. Все представления, связанные с ней, потеряют свои выделения. Замечание: В режиме OnManualSubmit все применённые изменения не будут очищаться, если submitAll() не выполнится. Текущая транзакция может быть отменена и применена позже без потери данных. Смотрите также revertAll() и lastError(). QString QSqlTableModel::tableName () constВозвращает имя текущей выбранной таблицы. bool QSqlTableModel::updateRowInTable ( int row, const QSqlRecord & values ) [virtual protected]Обновляет переданную строку row в текущей активной таблице БД переданными значениями values. Возвращает true в случае успеха; при неудаче возвращается false. Это низкоуровневый метод, который используется только при непосредственной работе с БД, не стоит вызывать его напрямую. Используйте setData() для обновления значений. Модель выбирает в зависимости от текущей стратегии редактирования, когда изменять БД. Помните, что только помеченные как генерируемые значения могут быть обновлены. Флаг, отвечающий за то, являются ли данные генерируемыми, может быть установлен с помощью QSqlRecord::setGenerated() и проверен посредством QSqlRecord::isGenerated(). Смотрите также QSqlRecord::isGenerated() и setData(). |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |