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 |