Название: как обновлять qtmodel извне? Отправлено: nvek от Декабрь 12, 2017, 05:59 собсно везде где есть примеры, там добавление и удаление элементов завернуто в
Код: BeginInsert/Remove() Я пробовал вот так: Код: BeginInsert/Remove() Бывают такие случаи, когда: вначале вызываются Код: BeginInsert/Remove() Хах. >:( >:( Допустим есть метод update() { в нем я запросил актуальные данные затем сравнил с данными которые у меня есть. послал сигнал который говорит beginInsertRow() //но не завершает дальше в цикле добавляю новые айтемы затем хочу послать сигнал на завершение endInsertRow(); } первая итерация прошла успешно, но когда доходит до beginInsertRow() в какой то другой раз, на нем и останавливается вся программа .. и ... вылетает Название: Re: как обновлять qtmodel извне? Отправлено: ssoft от Декабрь 12, 2017, 08:03 собсно везде где есть примеры, там добавление и удаление элементов завернуто в Код: BeginInsert/Remove() ... Что значит данные приходят и уходят сами? Модель - это некоторое отражение реальных данных, которая позволяет сформировать их двумерное представление (список, таблица, дерево и др.). Задача разработчика транслировать изменение данных в соответствующие изменения модели и ее сигналы. Например, данные изменились -> событие необходимо обработать и преобразовать в сигнал модели dataChanged с указанием ячеек, на которые влияют данные (содержимое, цвета, шрифта и т.д.). Если данные добавились -> необходимо вызвать beginInsert, провести изменения в модели, соответствующие изменениям данных, endInsert. Если данные удалились -> необходимо вызвать beginRemove, провести изменения в модели, соответствующие изменениям данных, endRemove. Это позволяет обеспечить согласованность модели и данных. Все другие способы будут приводить к описанным ошибкам. Название: Re: как обновлять qtmodel извне? Отправлено: nvek от Декабрь 12, 2017, 09:14 Модель Qt не разчитана чтобы данные обновлялись извне.
представим есть структура treeItem (иерархическая) в определенные промежутки времени я "согласовываю" мои данные с данными которые пришли с сервера. напрямую мне не выпустить уже сигнал beginInsert/Remove и endInsert/Remove из TreeItem приходится: отслеживать позицию этого элемента (добавленного или удаленного), сопоставлять его с элементом ModelIndex. посылать сигнал чтобы он изменил Название: Re: как обновлять qtmodel извне? Отправлено: Авварон от Декабрь 12, 2017, 10:28 Вам нужна копия данных или более полный контроль над хранилищем.
В общем случае, модель может менять порядок данных (сортировка) или убирать часть их них (фильтрация). Во втором случае нобходимо наличие дополнительной, фильтрованной копии. Для экономии всегда можно использовать указатели (шаредные) на данные или индексы на них и хранить в модели вектор указателей. Название: Re: как обновлять qtmodel извне? Отправлено: nvek от Декабрь 12, 2017, 14:16 Может вопрос покажется странным, но можно ли заблокировать все сигналы главной формы? в определенный промежуток?
Название: Re: как обновлять qtmodel извне? Отправлено: Авварон от Декабрь 12, 2017, 14:52 Можно, но это чревато багами. Так делать не надо.
|