
- •Аннотация к разделу
- •Теоритические принципы создания приложений бд
- •Основные задачи и сложности организации работы с бд
- •Программный (встроенный) sql
- •Статический sql
- •Динамический sql
- •Интерфейсы программирования приложений бд (api)
- •Интерфейс odbc
- •Механизм использования бд, применяемый в современных графических средствах разработки
- •Создание приложения, использующего бд Аннотация к подразделу
- •Настройка источников данных odbCвwindows
- •Базовые сведения о Qt
- •Введение
- •Модули Qt
- •Собственная система сборки Qt
- •Сигналы и слоты
- •Небольшой пример использования сигналов и слотов
- •Литература по Qt
- •Программный уровень
- •Уровень пользовательского интерфейса
- •Операции с бд
- •Соединение с бд
- •Выполнение запросов выборки и возврат результатов
- •Выполнение запросов вставки, обновления и удаления
- •Использование параметризованных запросов
- •Выполнение транзакций
- •Связь данных с пользовательским интерфейсом
- •Использование классов – моделей данных sql.
- •Отображение результата запроса выборки в таблице
- •Отображение и редактирование данных таблиц
- •Отображение и редактирование данных таблиц с использованием подстановки для внешних ключей
- •Связь элементов данных с обычными виджетами
- •Настройка собственной модели данных
Отображение и редактирование данных таблиц с использованием подстановки для внешних ключей
QSqlRelationalTableModel расширяет QSqlTableModel, обеспечивая поддержку внешних ключей.
Пример на рисунке 0 показывает различие вы представлении информации табличной модели и модели с поддержкой внешних ключей.
Рисунок 0 – Сравнение представлений, использующих QSqlTableModel и QSqlRelationalTableModel
Верхний снимок окна показывает простую QSqlTableModel, загруженную в представление (виджет QTableView). Внешние ключи (cityиcountry) не заменены на читаемые человеком значения.Нижний снимок показывает QSqlRelationalTableModel с внешними ключами, замененными читаемыми человеком текстовыми значениями, взятыми из словарей.
Следующий фрагмент кода показывает, как настроить QSqlRelationalTableModel для поддержки внешних ключей.
model->setTable("employee");
model->setRelation(2, QSqlRelation("city", "id", "name"));
model->setRelation(3, QSqlRelation("country", "id", "name"));
Вызов функции setRelation() устанавливает взаимосвязь между двумя таблицами (в контексте модели данных).
Если вы хотите иметь возможность изменения значений внешних ключей через выпадающий список связанных значений родительской таблицы, вы можете использовать класс QSqlRelationalDelegate в виджете-представлении.
Делегаты– это объекты классов унаследованных от QAbstractItemDelegate, предназначенные для отображения и редактирования данных из моделей в виджетах-представлениях. Например, поле ввода, появляющееся в ячейке виджета-таблицы при изменении значения в этой ячейке. Определение собственного класса делегатов и переопределение соответствующих полиморфных (виртуальных функций) позволяет организовать особый режим редактирования и отображения данных в представлениях (пример на рисунке 0).
Рисунок 0 – Пользовательские делегаты в действии
В отличие от делегата по умолчаниюQSqlRelationalDelegate предоставляет выпадающий список для редактирования внешних ключей.
Для использования класса всего лишь необходимо вызвать функцию QAbstractItemView::setItemDelegate() для представления, передав ей экземпляр QSqlRelationalDelegate в качестве параметра, как показано в примере:
QTableView *view = new QTableView;
view->setModel(model);
view->setItemDelegate(new QSqlRelationalDelegate(view));
Рисунок 0 иллюстрирует использование QSqlRelationalDelegate в представлении.
Рисунок 0 – Пользовательские делегаты в действии
Связь элементов данных с обычными виджетами
qt
Настройка собственной модели данных
qt