![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
kibsoft |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Взял пример написания новой модели из документации и изменил QStringList на QList<Connection*>. Connection - наследник QTcpSocket.
Что неправильно? |
|
|
![]() |
kibsoft |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Проблема решена. Нужно было использовать reset() у модели для обновления view.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kibsoft |
![]()
Сообщение
#4
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
azure |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Потому что не дочитал про модели. угу, раздельчик маленький про изменение размеров моделиА можно поподробнее? Как раз сейчас встала задача такая.. В существующий QList <myclass*> добавляются элементы, при этом соответствующая модель не обновляет QListView. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData |
|
|
azure |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Которую я сделал. Сделал subclass от QAbstractListModel, реализовал data() и rowCount. Проверил, data() возвращает непустой QVariant, rowCount() возвращает число строк. И не важно, подключаю я модель к виду пока данных нет, или когда данные появляются - вид остается пустой. Вызовы model->rowCount() и model->data() происходят, значит, вид их вызывает. Возвращаются корректные значения. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData Вот это я вроде как понимаю. А как вид узнает от модели, что нижележащие данные изменились? Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), но я не совсем понимаю, как её реализовать. Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
что нижележащие данные изменились? что значит ниже лежащие?Вот когда данные в модели изменились, она посылает сигнал dataChanged() Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), не правильно понял, для представления модель и является источником данных, а где она их берёт представлению безразлично. Метод setData() не оповещает модель, а устанавливает данные в ней (что следует из названия метода)Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. читай всё и не пропустишь соответствующий раздельчик.
|
|
|
azure |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
что значит ниже лежащие? Есть класс PlotCurve, каждый из которых содержит QString name. Объекты создаются при помощи new, указатели помещаются в QList<PlotCurve*>. Сделал модель (subclass от QAbstractListModel) - PlotCurveModel.
Вызываются обе эти функции, с помощью qDebug я удостоверился что возвращаемый QVariant содержит строку с именем нужной PlotCurve. Вот когда данные в модели изменились, она посылает сигнал dataChanged() Пробовал, вид не обновлялся почему-то. Видимо, у меня есть какаято бяка в коде. Есть гденить рабочие примеры с наследованием моделей и с изменением данных? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Есть гденить рабочие примеры с наследованием моделей и с изменением данных? Дык, всё там же в документации по Модель/Представлении: Создание новых моделей
|
|
|
azure |
![]()
Сообщение
#13
|
Студент ![]() Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Есть гденить рабочие примеры с наследованием моделей и с изменением данных? Дык, всё там же в документации по Модель/Представлении: Создание новых моделейI did it! Как только в data() я сделал вместо тупого return QVaraint(object->getName()) обертку для обработки role, как показано в документации, - заработало. |
|
|
haiflive |
![]()
Сообщение
#14
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 8.7.2010 Пользователь №: 1868 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Что-то я не понял как подключить модель к базе..
QStringList stringList; нужно самому заполнять данными из БД?. Вобщем, нужно организовать поиск в базе по одному столбцу из таблицы (найти по фамилии) при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы.. и тд.. колличество записей ~5000 Вопросы: 1) какую модель использовать? 2) как её заполнить? 4) как подключить к QListView 3) как её заполнить из базы(MySQL)? Спасибо за ответы. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Что-то я не понял как подключить модель к базе.. даQStringList stringList; нужно самому заполнять данными из БД?. 1) какую модель использовать? QSqlTableModel больше всего подойдёт.1) какую модель использовать? смотри описание2) как её заполнить? 4) как подключить к QListView 3) как её заполнить из базы(MySQL)? нет разницы из какой базы.при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы. нужно использовать промежуточную модель (proxy)haiflive, тебе не мешало бы посмотреть все примеры и демонстрации Qt. твоя задача уже есть в виде примера |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 26.6.2025, 5:50 |