Как использовать спокойную платформу Модели/Представления с Графической платформой Представления

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

Если бы мне только была нужна таблица, и форма просматривает, то это было бы легко, я просто использовал бы спокойную платформу Модели/Представления. Однако мне нужно представление карты, чтобы предоставить функциональности только действительно доступное использование Графической платформы Представления, которая является чрезвычайно своей собственной платформой Модели/Представления с QGraphicsScene, действующим как модель данных.

Я могу думать о двух способах сделать это. Нужно было бы запустить с авторитетной модели, разделенной на подклассы от QAbstractItemModel, связать его с подклассом QAbstractItemView и оттуда генерировать и обновить QGraphicsItems в сцене. Это выглядит ужасным хотя, потому что я не уверен, как обработать взаимодействие с пользователем с и изменения в элементах данных хотя взаимодействие с QGraphicsItems.

Другим путем я могу думать, чтобы сделать это, должен рассматривать QGraphicsScene как авторитетный источник данных, храня объект данных в .data каждого QGraphicsItem () свойство. Я затем разделил бы QAbstractItemModel на подклассы и записал бы это так, чтобы это получило доступ к данным в сцене, поскольку это - хранилище данных, другие представления затем использовали бы это в качестве своей модели. Как я распространил бы изменения в данных в сцене до модели хотя?

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

Таким образом, какой подход был бы Вы выбирать (авторитетный) QAbstractItemModel-> QAbstractItemView-> QGraphicsScene или альтернативно (авторитетный) QGraphicsScene-> QAbstractItemModel-> Другие Представления. Почему Вы выбрали бы один по другой и какие глюки Вы ожидаете? Кто-либо еще должен был устранить этот разрыв между двойными платформами модели/представления QT и как Вы делали это?

16
задан Simon Hibbs 7 July 2010 в 07:11
поделиться

1 ответ

QAbstractItemModel (авторитетный) -> QAbstractItemView-> QGraphicsScene

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

Это также позволяет вам представлять ваши данные в стандартных представлениях вместе со сценой, что довольно приятно.

Мой лучший совет - сохранить QHash от QPersistantModelIndex до QGraphicsItem и QGraphicsScene в QAbstractItemView вы создаете. Это позволяет быстро переключаться между областью модели / вида ( QModelIndex ) и областью графического представления ( QGraphicsItem )

12
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: