2014-08-28 3 views
1

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

У меня есть один набор сложных данных, что я хочу, чтобы показать пользователю в двух (или более) различных мод:

  • полные данные показано
  • только выбранные (частично) информацию показано

Способ, которым эти данные печатаются, для меня не имеет значения, но если это поможет, это либо в виде таблицы (основная информация), либо в виде столбца (полная информация). эти две классы исходят из структуры модели/представления QT.

Теперь я хотя о два вариант реализации этого и задаться вопросом, кого я должен использовать

Вариант 1

  • Я построю свою структуру данных,
  • включить его в пользовательской модели
  • специализация (подкласс) для того, чтобы печатать только то, что меня интересует.

Вариант 2

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

Я бы честно пошел на вариант 2, но, увидев количество случаев в Интернете, где используется вариант 1, я начал задаваться вопросом, правильно ли я делаю это правильно. (Я не нашел ни одного примера двойной модели данных, когда несколько видов модели выглядят довольно часто)

Размещение данных, относящихся к обработке внутри классов классов, кажется мне неправильным, но дублирование моделей данных приводит к дублированию данные (что также кажется неправильным) или общие данные (а затем модель больше не «удерживает» данные)

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

+0

Его важно, что вы подразумеваете под «выбранными данными». Вы хотите оставить некоторые столбцы из всех записей, оставив некоторые строки или и то, и другое? – RobbieE

+0

С точки зрения QT это не строка или столбец, а дочерние элементы, которые необходимо отфильтровать. Строка строки, если вы предпочитаете, с данными связанных столбцов. –

ответ

0

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

Итак, есть два способа отфильтровать данные:

1.Create две модели, которые будут обмениваться данными. Это стандартный подход recommended - не хранить данные в моделях.

2.Создайте одну модель, предоставляющую все данные, и создайте прокси-модель, унаследованную от QSortFilterProxyModel, чтобы отфильтровать данные.

Вам нужно будет переопределить метод filterAcceptsColumn для фильтрации столбцов и filterAcceptsRow для фильтрации строк.

Затем используйте View-Model, чтобы показать все данные, или View-Proxy-Model, чтобы показать некоторые данные.

+0

Спасибо за ответ. Мне очень понравился класс QSortFilterProxyModel, я буду более глубоко смотреть на него. Это похоже на стандартную реализацию двойного модельного подхода. Я также ценю ссылку на обработку данных, QT model view doc пропустил меня, чтобы подумать, что модели действительно предполагали «удерживать» данные. –

Смежные вопросы