MVC. Своя модель и ListView |
Здравствуйте, гость ( Вход | Регистрация )
MVC. Своя модель и ListView |
kibsoft |
27.2.2010, 23:19
Сообщение
#1
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
Взял пример написания новой модели из документации и изменил QStringList на QList<Connection*>. Connection - наследник QTcpSocket.
Что неправильно? |
|
|
kibsoft |
27.2.2010, 23:59
Сообщение
#2
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
Проблема решена. Нужно было использовать reset() у модели для обновления view.
|
|
|
Litkevich Yuriy |
28.2.2010, 7:53
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kibsoft |
28.2.2010, 13:41
Сообщение
#4
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
|
|
|
BRE |
28.2.2010, 14:40
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Litkevich Yuriy |
28.2.2010, 15:18
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
azure |
26.4.2010, 23:21
Сообщение
#7
|
Студент Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: 0 |
Потому что не дочитал про модели. угу, раздельчик маленький про изменение размеров моделиА можно поподробнее? Как раз сейчас встала задача такая.. В существующий QList <myclass*> добавляются элементы, при этом соответствующая модель не обновляет QListView. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. |
|
|
Litkevich Yuriy |
27.4.2010, 1:38
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData |
|
|
azure |
27.4.2010, 7:42
Сообщение
#9
|
Студент Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: 0 |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Которую я сделал. Сделал subclass от QAbstractListModel, реализовал data() и rowCount. Проверил, data() возвращает непустой QVariant, rowCount() возвращает число строк. И не важно, подключаю я модель к виду пока данных нет, или когда данные появляются - вид остается пустой. Вызовы model->rowCount() и model->data() происходят, значит, вид их вызывает. Возвращаются корректные значения. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData Вот это я вроде как понимаю. А как вид узнает от модели, что нижележащие данные изменились? Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), но я не совсем понимаю, как её реализовать. Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. |
|
|
Litkevich Yuriy |
27.4.2010, 11:53
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
что нижележащие данные изменились? что значит ниже лежащие?Вот когда данные в модели изменились, она посылает сигнал dataChanged() Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), не правильно понял, для представления модель и является источником данных, а где она их берёт представлению безразлично. Метод setData() не оповещает модель, а устанавливает данные в ней (что следует из названия метода)Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. читай всё и не пропустишь соответствующий раздельчик.
|
|
|
Текстовая версия | Сейчас: 19.4.2024, 5:58 |