Представление в программировании это

  


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

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

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

Model-View-Controller (MVC) — это шаблон проектирования. Происходящий из Smalltalk и часто используемый при создании пользовательских интерфейсов. В Шаблонах Проектирования, Gamma et al. напишите:MVC состоит из трех видов объектов.

Модель-это объект приложения. Представление-его экранное представление. А Контроллер определяет. Как пользовательский интерфейс реагирует на вводимые пользователем данные. До MVC дизайн пользовательского интерфейса имел тенденцию объединять эти объекты вместе. MVC разъединяет их. Чтобы повысить гибкость и повторное использование. Если представление и объекты контроллера объединены. То результатом является архитектура модели/представления. Это все еще отделяет способ хранения данных от способа их представления пользователю. Но обеспечивает более простую структуру. Основанную на тех же принципах.

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


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

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

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

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

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

Абстрактные классы предназначены для подклассов. Чтобы обеспечить полный набор функций. Ожидаемых другими компонентами; это также позволяет писать специализированные компоненты.

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

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

Модели

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

Основные понятия. Окружающие модели. Представлены в разделе о классах моделей.

QAbstractItemModel предоставляет достаточно гибкий интерфейс для обработки представлений. Представляющих данные в виде таблиц. Списков и деревьев.

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

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

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

  • QStringListModel используется для хранения простого списка элементов QString.
  • QStandardItemModel управляет более сложными древовидными структурами элементов. Каждый из которых может содержать произвольные данные.
  • QDirModel предоставляет информацию о файлах и каталогах в локальной файловой системе.
  • QSqlQueryModel, QSqlTableModelи QSqlRelationalTableModel используются для доступа к базам данных с помощью соглашений model/view.

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

Число просмотров

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

Доступные представления рассматриваются в разделе. Посвященном

классам представлений.

Делегаты

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

Делегаты описаны в разделе. Посвященном классам делегатов.

Сортировка

Существует два способа подхода к сортировке в архитектуре модели/представления; какой подход выбрать. Зависит от вашей базовой модели.

Если ваша модель является сортируемой, т. Е. Если она переопределяет функцию QAbstractItemModel::sort (), QTableView и QTreeView предоставляют API. Который позволяет программно сортировать данные модели.

Кроме того, вы можете включить интерактивную сортировку (т. Е. Разрешить пользователям сортировать данные. Щелкнув заголовки представления). Подключив сигнал QHeaderView::sectionClicked() к слоту QTableView::sortByColumn() или слоту QTreeView::sortByColumn() соответственно.

Альтернативный подход. Если ваша модель не имеет необходимого интерфейса или если вы хотите использовать представление списка для представления ваших данных. Заключается в использовании прокси-модели для преобразования структуры вашей модели перед представлением данных в представлении.

Это подробно описано в разделе о прокси-моделях.

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

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

Эти классы менее гибки. Чем классы представлений. И не могут использоваться с произвольными моделями.

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

Если вы хотите воспользоваться преимуществами функций. Предоставляемых подходом model/view. Все еще используя интерфейс на основе элементов . Рассмотрите возможность использования классов view. Таких как QListView, QTableViewи QTreeView с QStandardItemModel.

Следующие разделы описывают способ. Которым шаблон модели/представления используется в Qt.

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


Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) Trademarks

Qt Jambi 4.5.2_01