2013-04-24 4 views
0

Я разрабатываю интерфейс Qt UI и имею два разных вида (QGraphicsObject класс) для той же модели (автомобиль).Два вида, одна модель: как обновить представления при изменении модели

Когда модель автомобиля будет обновлена ​​(в одном из двух виджетов), я хочу, чтобы оба вида были обновлены (и, конечно же, это касается модели).

Интуитивно понятный способ сделать это - обновить модель и позволить представлениям захватывать «сигнал» или что-то подобное, когда это происходит, чтобы обновить себя.

Я хочу знать, является ли это рекомендуемым поведением (в MVC), поскольку оно заставляет модель иметь некоторое двунаправленное соединение со своими представлениями (в то время как в MVC модель не должна иметь список своих представлений).

Также, что такое хороший способ реализовать это в Qt? (используйте сигналы Qt? Поднимите флаг, когда модель была изменена?)

ответ

0

Как будет выглядеть ваша модель? В Qt существует стандартный API для подобранных в виде табличных и древовидных моделей, model-view programming. Тем не менее, это не так хорошо работает с QGraphicsScene, который, по-видимому, вы используете. Вы не сказали, что хотите использовать для связи, или как структурируются данные, которые вы моделируете, поэтому трудно сказать, что именно вы должны здесь делать.

Таким образом, обычный шаблон MVC (который сопоставляет API QAbstractItemModel, используемый в Qt), позволяет моделировать любые прикрепленные представления о любых изменениях базовых данных; в Qt это делается с помощью сигналов, к которым соединяются представления. Когда представления хотят изменить данные, они вызывают методы на модели. Когда модель принимает изменения, она испускает стандартные сигналы, чтобы впоследствии все виды обновлялись.

+0

Но как я могу «подключить» модель к виду в Qt? Я на самом деле просто считал, что моя модель является атрибутом моих представлений (пользовательский '' QGraphicsObject'')? – halflings

+0

QAbstractItemМодели могут быть подключены к подклассам QAbstractItemView с помощью setModel(). Однако это скорее таблица/дерево/список. Если у вас меньше данных и, скорее, несколько переменных состояния, которые вы хотите контролировать (вместо списков и т. Д.), Модель QObject модели, содержащая состояние и отправляющая сигналы об изменениях, может быть лучше подходит. Нет никакой картины, чтобы поймать все варианты использования, это скорее зависит от вашей модели. –

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