LINUX.ORG.RU

Есть данные, над которыми 2 модели для разного отображения.

модели не занимаются отображением.

dib2 ★★★★★
()
Ответ на: комментарий от Pavval

Привет.
Есть данные, над которыми 2 модели для разного отображения.
У меня закрались сомнения, что данный дизайн правильный, поскольку обновление данных в одной модели, нужно как-то обновить вторую модель (сейчас делается просто reset). Чтобы вы посоветовали? Как принято делать в этом случае?
Спасибо.

UVV ★★★★★
() автор топика
Ответ на: комментарий от dib2

модели не занимаются отображением

Ну так вот этот-то метод в модели http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#columnCount , а не во view, т.е. отвечает за будущее отображение.
Можно немного поподробнее, пжлста, как мне объединить эти 2 модели в одну.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Кутешная модель реализует трехмерное хранилище данных (row, count и вглубь через QModelIndex). Это не имеет никакого отношения к отображению.

staseg ★★★★★
()
Ответ на: комментарий от staseg

ок, я понел, по ссылке никто не ходил )
Есть QByteArray. В одной модели он отображается и редактируется как hex, в другой, как bin.
Как мне указать в одном view, что количество столбцов 8, а в другом, что их 16?

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

QAbstractProxyModel

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

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 2)
Ответ на: комментарий от staseg

А вот он что-то у меня из головы совсем вылетел. Т.е. для меня будет решением: BaseModel, 2 ProxyModels, 2 Views (2 delegates)?
Что делает proxyModel, если данные в base model меняются?

UVV ★★★★★
() автор топика
Ответ на: комментарий от staseg

QAbstractProxyModel

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

staseg ★★★★★
()
Ответ на: комментарий от UVV

Что делает proxyModel, если данные в base model меняются?

В базовой модели берешь сигнал изменения данных, связываешь с обработчиком в прокси-модели. Сигналов там несколько AFAIK на разные случаи. Я на память не скажу точно, смотри документацию. В Qt4 было несколько усовершенствований прокси моделей в промежуточных версиях, что в пятой — хз. Возможно весь геммор (а его есть!) связывания моделей сигналами уже скрыли в какой-нибудь промежуточной стандартной модели.

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от staseg

И тут закрадывается вопрос. Если связь сигналами делается ручками и в случае одна базовая модель, 2 прокси, и в случае 2 модели с указателем на те же данные, так может второй случай не такой уж и велосипед?

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

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

staseg ★★★★★
()
Ответ на: комментарий от UVV

Загуглил за тебя. В 4.8 появилась QIdentityProxyModel, на первый взгляд она как раз скрывает управление синхронизацией.

staseg ★★★★★
()
Ответ на: комментарий от UVV

Редактирование в разных видах можно реализовать в QItemDelegate.

grondek
()

Ты бы описал исходную задачу. Вдруг ты ее не так решаешь изначально?

grondek
()

задачу нормально опиши и представь публике. может чего дельного засоветуют.

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

Я кажется уже описал задачу, есть набор данных, который нужно представить в виде hex и bin.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

как то смутно задача описана, если честно.

PS правильно заданный вопрос это половина ответа.

MikeDM ★★★★★
()
Ответ на: комментарий от UVV

PPS Хорошо сформулированный вопрос отпадает сам собой.

MikeDM ★★★★★
()
Ответ на: комментарий от UVV

Хы. Берешь модель, записываешь данные в одну колонку. Пишешь 2 делегата, один рисует и редактирует как hex, второй - как bin. Редакторами (QItemDelegate::createEditor) назначаешь QLineEdit с валидаторами. В QItemDelegate переопределяешь так же paint (чтобы рисовать корректно), setModelData и setEditorData (чтобы поставлять в редактор не число,а hex или bin представление).

В модели хранишь числа.

grondek
()
Ответ на: комментарий от grondek

По-моему, решение отлично подходит к твоему ТЗ.

grondek
()

ProxyModel над общими данными.

g0t0
()
Ответ на: комментарий от UVV

Что мешает преобразовывать данные hex <-> bin во View, а в модели держать их в виде string of decimals?

g0t0
()
Ответ на: комментарий от staseg

берешь сигнал изменения данных, связываешь с обработчиком в прокси-модели

Зачем? ЕМНИП, прокси сама везде где надо коннектится.

g0t0
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.