Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

[Следующая: Использование Моделей и Представлений]

Программирование Модель/Представление

Введение

В Qt 4 введен новый набор классов для просмотра элементов, которые используют архитектуру модель/представление для управления взаимосвязью между данными и спобом их представления пользователю. Разделение функциональности, введенное этой архитектурой, дает разработчикам большую гибкость в настройке отображения элементов и предоставляет стандартный интерфейс модели для того, чтобы позволить широкому диапазону источников данных работать с существующими представлениями элементов. В данном документе мы даем краткое представление о парадигме модель/представление, выделяем вовлеченные концепции и описываем архитектуру системы представления элементов. Даем объяснения каждого компонента архитектуры, приводим примеры и показываем использование каждого компонента.

Архитектура Модель/Представление

Диспетчер-Модели-Представления (Model-View-Controller (MVC)) - образец проекта, происходящий от Smalltalk, который часто используется при создании пользовательских интерфейсов. Описан в Design Patterns, Gamma и др.:

MVC состоит из трех видов объектов. Модель - прикладной объект, Представление - его экранное представление, а Диспетчер определяет реакцию пользовательского интерфейса на ввод данных пользователем. До MVC, проекты пользовательского интерфейса имели тенденцию к смешиванию этих объектов. MVC четко разделяет их для повышения гибкости и повторного использования.

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

Архитектура модель/представление

Модель общается с источником данных и предоставляет интерфейс для других компонентов архитектуры. Характер общения зависит от типа источника данных и реализации модели.

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

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

Вообще, классы архитектуры модель/представление могут быть разделены на три группы описанные выше: модели, представления и делегаты. Каждый из этих компонентов определяет абстрактные классы, которые предоставляют общий интерфейс и, в некоторых случаях, осообенности реализации по умолчанию. Предполагается, что создаются подклассы этих абстрактных классов, предоставляющие полную реализацию функциональности, ожидаемой другими компонентами, что также позволяет создавать специфичные компоненты.

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

Модели

Все модели элементов основаны на классе QAbstractItemModel. Этот класс определяет интерфейс, используемый представлениями и делегатами для доступа к данным. Сами данные не должны храниться в модели; они могут храниться в структуре или хранилище, предоставляемом отдельным классом, файле, базе данных, или каком-либо другом прикладным компоненте.

Базовые концепции моделей описаны в разделе Классы Моделей.

QAbstractItemModel предоставляет интерфейс между данными и представлением, который является достаточно гибким, чтобы использоваться представлениями данных в виде таблиц, списков и деревьев. Однако, при реализации новых представлений данных в виде списков и таблиц, классы QAbstractListModel и QAbstractTableModel послужат лучшей отправной точкой, так как они предоставляют реализации соответствующих функций по умолчанию. На основе каждого из этих классов можно сделать подклассы для предоставления моделей, поддерживающих специфичные виды списков и таблиц.

Процесс создания подклассов моделей обсуждается в разделе Создание Новых Моделей.

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

Если эти стандартные модели не отвечают Вашим требованиям, то для создания своих собственных моделей Вы можете создать подкласс QAbstractItemModel, QAbstractListModel или QAbstractTableModel.

Представления

Предоставляются полные реализации для различных видов представлений: QListView отображает список элементов, QTableView отображает данные модели в виде таблицы, а QTreeView отображает элементы модели в виде иерархического списка. Каждый из этих классов основан на базовом абстактном классе QAbstractItemView. Хотя эти классы и готовы к использованию, они могут иметь подклассы, для более точной настройки представления.

Доступные представления описаны в разделе Классы Представлений.

Делегаты

QAbstractItemDelegate - это абстрактный базовый класс в структуре модель/представление. Реализация делегата по умолчанию предоставляется классом QItemDelegate, который используется в качестве делегата по умолчанию в стандартных представлениях Qt.

Делегаты описаны в разделе Классы Делегатов.

Удобные Классы

Множество удобных классов получено из стандартных представлений для удобства использования в приложениях Qt, предназначенных для отображения основанных на элементах представлений и таблиц. Они не предназначены для создания на их основе подклассов, а существуют просто для предоставления знакомого интерфейса для эквивалентных классов Qt 3. Примерами таких классов служат QListWidget, QTreeWidget и QTableWidget, реализующие поведение, подобное поведению классов Qt 3 QListBox, QListView и QTable.

Эти классы менее гибки, чем классы представлений и не могут использоваться с произвольными моделями. Если Вы не сильно нуждаетесь в наборе основанных на элементах классов, мы рекомендуем использовать в обработке данных на основе архитектуры модель/представление именно их.

Компоненты Архитектуры Модель/Представление

Следующие разделы описывают способ использования архитектуры модель/представление Qt. Каждый из разделов предоставляет пример использования и сопровождается подразделом, показывающим, как Вы можете создавать новые компоненты.

См. также список Классы Модель/Представление.

Примеры по Теме

[Следующая: Использование Моделей и Представлений]


Copyright © 2005 Trolltech Trademarks
Qt 4.1.0
Hosted by uCoz