Spec-Zone.ru › Qt 5.12

Класс QSqlRelationalTableModel

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

Заголовок: #include <QSqlRelationalTableModel>
qmake: QT += sql
Наследует: QSqlTableModel
  • Список всех членов, включая унаследованные
  • Устаревшие члены

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

перечисление JoinMode { InnerJoin, LeftJoin }

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

QSqlRelationalTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
виртуальный ~QSqlRelationalTableModel()
QSqlRelation relation(int column) const
виртуальный QSqlTableModel * relationModel(int column) const
void setJoinMode(QSqlRelationalTableModel::JoinMode joinMode)
виртуальный void setRelation(int column, const QSqlRelation &relation)

Переопределённые открытые функции

виртуальный void clear() override
виртуальный QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
виртуальный bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
виртуальный bool select() override
виртуальный bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
виртуальный void setTable(const QString &table) override
  • 27 открытых функций, унаследованных от QSqlTableModel
  • 17 открытых функций, унаследованных от QSqlQueryModel
  • 4 открытых функции, унаследованных от QAbstractTableModel
  • 40 открытых функций, унаследованных от QAbstractItemModel
  • 31 открытых функций, унаследованных от QObject

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

виртуальный void revertRow(int row) override
  • 6 открытых слотов, унаследованных от QSqlTableModel
  • 2 открытых слотов, унаследованных от QAbstractItemModel
  • 1 открытый слот, унаследованный от QObject

Статические открытые члены

const QMetaObject staticMetaObject
  • 9 статических открытых членов, унаследованных от QObject

Переопределённые защищённые функции

виртуальный bool insertRowIntoTable(const QSqlRecord &values) override
виртуальный QString orderByClause() const override
виртуальный QString selectStatement() const override
виртуальный bool updateRowInTable(int row, const QSqlRecord &values) override
  • 9 защищённых функций, унаследованных от QSqlTableModel
  • 3 защищённых функций, унаследованных от QSqlQueryModel
  • 19 защищённых функций, унаследованных от QAbstractItemModel
  • 9 защищённых функций, унаследованных от QObject

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

  • 1 свойство, унаследованное от QObject
  • 4 сигналы, унаследованные от QSqlTableModel
  • 18 сигналов, унаследованных от QAbstractItemModel
  • 2 сигнала, унаследованные от QObject
  • 9 защищённых функций, унаследованных от QSqlTableModel
  • 3 защищённых функций, унаследованных от QSqlQueryModel
  • 19 защищённых функций, унаследованных от QAbstractItemModel
  • 9 защищённых функций, унаследованных от QObject
  • 1 защищённый слот, унаследованный от QAbstractItemModel

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

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

QSqlRelationalTableModel работает подобно QSqlTableModel, но позволяет устанавливать столбцы в качестве внешних ключей в другие таблицы базы данных.

Изображение слева показывает обычный QSqlTableModel в QTableView. Внешние ключи (city и country) не разрешены в удобочитаемые значения. Изображение справа показывает QSqlRelationalTableModel, где внешние ключи разрешены в удобочитаемые текстовые строки.

Следующий фрагмент кода демонстрирует, как был настроен QSqlRelationalTableModel:

    model->setTable("employee");

    model->setRelation(2, QSqlRelation("city", "id", "name"));
    model->setRelation(3, QSqlRelation("country", "id", "name"));

Функции setRelation() устанавливают связь между двумя таблицами. Первый вызов указывает, что столбец 2 в таблице employee является внешним ключом, который сопоставляется с полем id в таблице city, и что представление должно отображать пользователю поле city в name поле. Второй вызов делает аналогичное.

Если вы используете QSqlRelationalTableModel для чтения и записи, вы, вероятно, захотите использовать QSqlRelationalDelegate для представления. В отличие от стандартного делегата, QSqlRelationalDelegate предоставляет выпадающий список для полей, которые являются внешними ключами в другие таблицы. Для использования класса просто вызовите QAbstractItemView::setItemDelegate() для представления с экземпляром QSqlRelationalDelegate:

    QTableView *view = new QTableView;
    view->setModel(model);
    view->setItemDelegate(new QSqlRelationalDelegate(view));

Пример relationaltablemodel демонстрирует, как использовать QSqlRelationalTableModel совместно с QSqlRelationalDelegate для обеспечения таблиц поддержкой внешних ключей.

Примечания:

  • Таблица должна иметь объявленный первичный ключ.
  • Первичный ключ таблицы не может содержать отношение к другой таблице.
  • Если реляционная таблица содержит ключи, которые ссылаются на несуществующие строки в связанной таблице, строки с недействительными ключами не будут показаны через модель. Пользователь или база данных отвечает за поддержание целостности ссылок.
  • Если имя отображаемого столбца отношения также используется как имя столбца в реляционной таблице или если оно используется в качестве имени отображаемого столбца в более чем одном отношении, оно будет алиасировано. Псевдоним — это имя таблицы отношения, имя отображаемого столбца и уникальный идентификатор, соединённые подчёркиванием (например, tablename_columnname_id). QSqlRecord::fieldName() вернёт алиасированное имя столбца. Все вхождения дублирующегося имени отображаемого столбца алиасируются при обнаружении дублирования, но никакой алиасирования не выполняется для имён столбцов в основной таблице. Алиасирование не влияет на QSqlRelation, поэтому QSqlRelation::displayColumn() вернёт исходное имя отображаемого столбца.
  • Имя таблицы ссылки алиасировано. Псевдоним — это слово «relTblAl», а индекс связанного столбца соединяется подчёркиванием (например, relTblAl_2). Псевдоним можно использовать для фильтрации таблицы (например, setFilter("relTblAl_2='Oslo' OR relTblAl_3='USA'")).
  • При использовании setData() роль всегда должна быть Qt::EditRole, а при использовании data() роль всегда должна быть Qt::DisplayRole.

См. также QSqlRelation, QSqlRelationalDelegate и Пример модели реляционной таблицы.

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

перечисление QSqlRelationalTableModel::JoinMode

Константа Значение Описание
QSqlRelationalTableModel::InnerJoin 0 - Режим внутреннего соединения, возвращает строки, когда в обеих таблицах есть хотя бы один совпадение.
QSqlRelationalTableModel::LeftJoin 1 - Режим левого соединения, возвращает все строки из левой таблицы (table_name1), даже если в правой таблице (table_name2) нет совпадений.

Это перечисление было введено или изменено в Qt 4.8.

См. также QSqlRelationalTableModel::setJoinMode().

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

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

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

[virtual] QSqlRelationalTableModel::~QSqlRelationalTableModel()

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

[override virtual] void QSqlRelationalTableModel::clear()

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

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

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

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

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

Переопределено из QSqlTableModel::insertRowIntoTable().

[override virtual protected] QString QSqlRelationalTableModel::orderByClause() const

Переопределено из QSqlTableModel::orderByClause().

QSqlRelation QSqlRelationalTableModel::relation(int column) const

Возвращает отношение для столбца column или недействительное отношение, если отношение не задано.

См. также setRelation() и QSqlRelation::isValid().

[virtual] QSqlTableModel *QSqlRelationalTableModel::relationModel(int column) const

Возвращает объект QSqlTableModel для доступа к таблице, для которой column является внешним ключом, или 0, если для данного column нет отношения.

Возвращаемый объект принадлежит QSqlRelationalTableModel.

См. также setRelation() и relation().

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

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

[override virtual slot] void QSqlRelationalTableModel::revertRow(int row)

Переопределено из QSqlTableModel::revertRow().

[override virtual] bool QSqlRelationalTableModel::select()

Переопределено из QSqlTableModel::select().

[override virtual protected] QString QSqlRelationalTableModel::selectStatement() const

Переопределено из QSqlTableModel::selectStatement().

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

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

Устанавливает данные для роли role в элементе с указанным index на заданное value. В зависимости от стратегии редактирования, значение может быть применено к базе данных сразу или может быть кэшировано в модели.

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

Для реляционных столбцов value должно быть индексом, а не отображаемым значением. Индекс также должен существовать в связанной таблице, в противном случае функция возвращает false.

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

void QSqlRelationalTableModel::setJoinMode(QSqlRelationalTableModel::JoinMode joinMode)

Устанавливает режим SQL-соединения для отображения или скрытия строк с NULL внешними ключами. В режиме InnerJoin (по умолчанию) эти строки не будут отображаться: используйте режим LeftJoin, если вы хотите их отобразить.

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

См. также QSqlRelationalTableModel::JoinMode.

[virtual] void QSqlRelationalTableModel::setRelation(int column, const QSqlRelation &relation)

Позволяет задать указанный столбец column в качестве внешнего индекса, определяемого relation.

Пример:

    model->setTable("employee");

    model->setRelation(2, QSqlRelation("city", "id", "name"));

Вызов setRelation() указывает, что столбец 2 в таблице employee является внешним ключом, который сопоставляется с полем id таблицы city, и что представление должно отображать пользователю поле city's name.

Примечание: первичный ключ таблицы не может содержать отношение к другой таблице.

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

[override virtual] void QSqlRelationalTableModel::setTable(const QString &table)

Переопределено из QSqlTableModel::setTable().

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

Переопределено из QSqlTableModel::updateRowInTable().

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

Spec-Zone.ru

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