2017-02-07 5 views
0

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

Addition 
|_QuadraticFunction 
| |_intercept=0.2 
| |_slope=0.0 
| |_quadratic=1.2 
|_Multiplication 
    |_LinearFunction 
    | |_intercept=0.0 
    | |_slope=-8.9 
    |_Gaussian 
     |_center=0.6 
     |_sigma=0.4 

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

(FunctionsView, первый вид)

Addition 
|_QuadraticFunction 
|_Multiplication 
    |_**LinearFunction** 
    |_Gaussian 

(selectedFunctionView, второй вид)

intercept 0.0 
slope -8.9 

в этом примере, пользователь нажал на LinearFunction в первом View, а второй вид автоматически показали его свойства.
Мой вопрос: могу ли я хранить всю свою структуру данных (имена функций и свойства функций) под одной моделью, а затем иметь два представления, отображающие только части модели, как указано выше? Если нет, мне нужно создать одну модель для каждого частичного представления, каждая модель индексирует разные части структуры данных? Пожалуйста, помогите, я неопытен с этим.

.Jose

ответ

0

Да, вы можете абсолютно держать все это в одной модели с двумя различными видами. Вероятно, вы захотите изучить QSortFilterProxyModel; у вас будет один из них для каждого вида. Прокси применяет сортировку и фильтрацию - и фильтрация - это то, что вы здесь делаете, - к более полной модели. Когда вы выберете что-то в главном представлении, вы захотите выдать сигнал, полученный другой прокси-моделью (или другим представлением и переданным ее прокси), а затем повторно отфильтровать на основе вновь выбранного элемента. На самом деле это очень просто использовать в целом. Простейшая ошибка заключается в том, что вы сбиваете с толку, какой модельный индекс использовать, потому что у вас будут модельные индексы для прокси, а также модельные индексы для полной модели, а иногда вам приходится конвертировать между ними. В документации достаточно ясно, где это необходимо, но это помогает быть более осведомленным об этом.

Взгляните на документацию, и если у вас есть дополнительные вопросы, обратитесь к нам.

+0

Большое спасибо за подсказку! Единственная модель - это то, что я хотел сохранить в синхронизации: D – jmborr

+0

Добро пожаловать ... хороший вопрос, и единственная модель - это, безусловно, путь. Недавно я работал с Qt MVC-механизмом, в том числе и с написанием пользовательского представления с нуля. Это очень хорошо разработанная система. – goug

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