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