Несколько источников данных + одно представление |
Здравствуйте, гость ( Вход | Регистрация )
Несколько источников данных + одно представление |
lanz |
27.3.2013, 13:51
Сообщение
#11
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Не не не, вьюха не может удалять модель, а если она одна на несколько вьюх? Тут что то не связанное с привязкой (мы ведь про setModel() говорим?).
|
|
|
Алексей1153 |
27.3.2013, 13:53
Сообщение
#12
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
lanz, ну да. Тогда согласен ) Просто у меня был несложный случай - одна модель и одно представление
|
|
|
Анна |
28.3.2013, 14:29
Сообщение
#13
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
И отсюда вытекает более правильное, на мой взгляд решение: менеджер объектов и вьюеров. У него есть список объектов, список вьюеров и список настроек Ну, в общем это и есть контроллер, причём он получает указания от третей стороны (той, которая меняет текущий объект), а пинает модель (сделай этот объект текущим) и вьюверы (перерисуйтесь в соответствии с этими установками) В общем, мы получили Модель-Контроллер-Представление, у которой Представление само является Модель-Представление. Цитата Однажды столкнулась с тем, что вювер как-то неадекватно повёл себя при смене модели "на ходу" Вот это поворот! А не вспомните случайно подробности? там дело же такое - создали на куче модель, присоединили к объекту и забыли. По идее, должна удалять, но на деле там что-то не так происходит, сначала объект удаляется, потом модель лезет по кривой памяти. У меня как-то так и происходило. Поэтому я в деструкторе модель отцеплял, тогда не падало Что-то такое и у меня было. Да. было два экземпляра QStandardModel с разной начинкой. Предполагала, что один вьювер будет отображать, то одну то, другую модель. А он при смене модели убивал предыдущую. Естественно, при попытке обратиться к убитой модели всё падало. Это было в Qt-4.4.0 два года назад. Не уверена, что точно вспомнила ситуацию. Возможно, я пыталась менять модель у сортирующей модели... Но то, что связка образовывалась раз и на всегда и смене на ходу не подлежала, это точно. Алексей1153, а как модель отсоединяли? Вроде бы такой функции нет, во всяком случае в 4.4.0. |
|
|
lanz |
28.3.2013, 15:39
Сообщение
#14
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата А он при смене модели убивал предыдущую. Не не не , совсем недавно видел рабочий код, который на горячую модели меняет. Если никаких дополнительных отношений (только setModel), то все в порядке. Из Qt 4.4: Цитата void QAbstractItemView::setModel ( QAbstractItemModel * model ) [virtual] Sets the model for the view to present. Note: The view does not take ownership of the model unless it is the model's parent object because it may be shared between many different views. Note: This function will also create and set a new selection model, replacing any previously set with setSelectionModel(), but the old selection model will not be deleted. Может это баг был в 4.4.0. И QAbstractProxyModel не удаляет... |
|
|
Анна |
28.3.2013, 15:52
Сообщение
#15
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
|
|
|
Алексей1153 |
30.3.2013, 12:34
Сообщение
#16
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Анна, setModel(0)
|
|
|
Текстовая версия | Сейчас: 25.4.2024, 22:31 |