Название: Как отключить обновление вида QTableView? Отправлено: OS2 от Февраль 16, 2016, 00:58 Всем доброго времени суток.
Подскажите, как отключить обновление вида, унаследованного от QTableView, у которого установлена табличная модель, унаследованная от QAbstractTableModel? ЗЫ: тоесть необходимо, чтобы содержимое вида не обновлялось, а модель продолжала получать новые данные и обновлять другие виды? ??? Заранее спасибо за ответ! Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 16, 2016, 08:21 setUpdatesEnabled устраивает?
Название: Re: Как отключить обновление вида QTableView? Отправлено: OS2 от Февраль 16, 2016, 09:50 К сожалению setUpdatesEnabled не подходит. Он полностью блокирует работу с видом, а я хотел, чтобы с видом можно было продолжать работать, но новые данные в него, из модели, не приходили...
Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 16, 2016, 10:09 К сожалению setUpdatesEnabled не подходит. Он полностью блокирует работу с видом, а я хотел, чтобы с видом можно было продолжать работать, но новые данные в него, из модели, не приходили... Вчера отвечал :)Почему бы не сделать "обертку" для контейнера? Рабочая нитка не удаляет, а увеличивает счетчик удаленных (или хранит индексы удаленных если можно удалять в любом порядке). Добавлять добавляет но rowCount возвращает старое значение. Разумеется все это тоже защищено локами. В итоге обе нитки работают с 1 контейнером, но модель какое-то время показывает его старую копию. Потом (хоть по таймеру) главная нитка посылает самой себе сигнал по которому (опять-таки под защитой лока) делается removeRows, удаленные реально удаляются, и insertRows. Все совершенно легально, и (на первый взгляд) несложно Название: Re: Как отключить обновление вида QTableView? Отправлено: OS2 от Февраль 16, 2016, 10:17 Ясно. Значит простого способа не существует...а жаль. :(
Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 16, 2016, 10:29 Ясно. Значит простого способа не существует...а жаль. :( Попривыкали сладко кушать готовые классы :)Название: Re: Как отключить обновление вида QTableView? Отправлено: Bepec от Февраль 16, 2016, 11:14 Таки интересная задача. В принципе можно написать модельку, которая будет хранить несколько наборов данных и в зависимости от View, которая запрашивает данные отдавать каждой view свой набор.
Но это задача не дня, тут только тестировать придётся недельку на мой взгляд. Название: Re: Как отключить обновление вида QTableView? Отправлено: VPS от Февраль 16, 2016, 11:46 К сожалению setUpdatesEnabled не подходит. Он полностью блокирует работу с видом, а я хотел, чтобы с видом можно было продолжать работать, но новые данные в него, из модели, не приходили... Может тогда создать временную модель - копию существующей?Только есть вопрос: насколько большая оригинальная модель и как поступать с обновлёнными данными во временной модели? Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 16, 2016, 11:47 А что, сделать модель-копию и подключить ее ко вью уже не круто в 21 веке?
UP: vps, вы меня опередили :) Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 16, 2016, 12:11 А что, сделать модель-копию и подключить ее ко вью уже не круто в 21 веке? Это было всегда плохо еще в 20-м :) Название: Re: Как отключить обновление вида QTableView? Отправлено: OS2 от Февраль 16, 2016, 12:47 Да, копии моделей делать не комильфо. Я думал есть более простой и элегантный способ решения моей проблемки... . ;)
Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 16, 2016, 18:16 Да, копии моделей делать не комильфо. Я думал есть более простой и элегантный способ решения моей проблемки... . ;) Но у Вас же "сделать копию" предопределено самим условием: тоесть необходимо, чтобы содержимое вида не обновлялось, а модель продолжала получать новые данные и обновлять другие виды? То есть имеется модель, которая обновляется И к ней привязане ДРУГИЕ виды. Ваш ВИД и, соответственно, ЕГО МОДЕЛЬ - это всего лишь "замороженная" копия оригинала. Что не так с копированием? Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 17, 2016, 05:02 То есть имеется модель, которая обновляется И к ней привязане ДРУГИЕ виды. То что данные "в 2 экземплярах", и их сбивка/синхронизация станет источником постоянных забот.Ваш ВИД и, соответственно, ЕГО МОДЕЛЬ - это всего лишь "замороженная" копия оригинала. Что не так с копированием? Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 17, 2016, 11:29 То что данные "в 2 экземплярах", и их сбивка/синхронизация станет источником постоянных забот. С каких делов то? Человек знает, когда ему получить копию данных и отобразить их. Залочил основную модель - сделал копию - разлочил - вывел в гуй. Где здесь могуть быть проблемы? Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 17, 2016, 15:44 С каких делов то? Человек знает, когда ему получить копию данных и отобразить их. Залочил основную модель - сделал копию - разлочил - вывел в гуй. Где здесь могуть быть проблемы? А не надо искать "где" - они сами Вас найдут, и гораздо быстрее чем ожидалось. И в конце-концов, почесав репу, придется согласиться с тем что "прынцыпы" лучше не нарушатьНазвание: Re: Как отключить обновление вида QTableView? Отправлено: Old от Февраль 17, 2016, 18:24 А не надо искать "где" - они сами Вас найдут, и гораздо быстрее чем ожидалось. И в конце-концов, почесав репу, придется согласиться с тем что "прынцыпы" лучше не нарушать Какие принципы? Ваше решение не рабочее. ТС необходимо остановить обновление данных только для одного вида, остальные виды должны продолжить обновляться в штатном режиме. Вы этого обеспечить не сможете.Так же ваше решение рассчитывает, что данные будут добавляться в конец, а часто это не так. Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 17, 2016, 18:24 А не надо искать "где" - они сами Вас найдут, и гораздо быстрее чем ожидалось. И в конце-концов, почесав репу, придется согласиться с тем что "прынцыпы" лучше не нарушать Вот правда не понимаю, где при такой архитектуре могут быть проблемы :) Это самый что ни на есть юз-кейс "по принципам из УмнойТолстойКнижки" :) Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 17, 2016, 18:33 Вот правда не понимаю, где при такой архитектуре могут быть проблемы :) Это самый что ни на есть юз-кейс "по принципам из УмнойТолстойКнижки" :) Это просто "save" или "фотография", годится для "обозрения". Но как только юзер попытается что-то сделать с "видимыми" данными - польется как из ведра Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 17, 2016, 18:40 Это просто "save" или "фотография", годится для "обозрения". Но как только юзер попытается что-то сделать с "видимыми" данными - польется как из ведра Ну и пусть себе делает, что хочет. "Видимая" модель существует совершенно независимо от "реальной", так что ничего страшного не произойдет :) Название: Re: Как отключить обновление вида QTableView? Отправлено: Igors от Февраль 17, 2016, 18:46 Ну и пусть себе делает, что хочет. "Видимая" модель существует совершенно независимо от "реальной", так что ничего страшного не произойдет :) Ага, а если, (как говорили выше) "несколько видов"? Вот Вы уже и приплыли. Что такого сложного в "виртуальной" модели? В самом худшем случае это массив пар (какая строка контейнера соответствует вью). Зато все по уму - данные едины. Прям уже каждого куста боимся :) Название: Re: Как отключить обновление вида QTableView? Отправлено: Racheengel от Февраль 17, 2016, 18:49 Ага, а если, (как говорили выше) "несколько видов"? Вот Вы уже и приплыли. Что такого сложного в "виртуальной" модели? В самом худшем случае это массив пар (какая строка контейнера соответствует вью). Зато все по уму - данные едины. Прям уже каждого куста боимся :) И что с того, что несколько? Это MVC, на такое поведение и рассчитан. Одна модель - несколько видов. "Виртуальная" модель, это прокси. Она будет рефлектировать изменения базовой модели, но автору то как раз это и не нужно, он хочет статичести видеть копию своих данных в какой-то момент истории. Название: Re: Как отключить обновление вида QTableView? Отправлено: Old от Февраль 17, 2016, 19:14 но автору то как раз это и не нужно, он хочет статичести видеть копию своих данных в какой-то момент истории. А если данные расшарить, то можно избежать их дублирование в памяти.Например, модель может хранить только умные указатели на элементы, при копировании модели мы продублируем только этот массив указателей. Что совершенно не скажется на возможности их модификации. |