Как запретить обновления содержимого QListView в автоматическом режиме?

381
02 августа 2017, 21:32

При соединении модели данных QAbstractTableModel к QListView данные обновляются автоматически (постоянно вызывается функция data).

Как можно самостоятельно управлять этим процессом?

Answer 1

Функция data вызывается не постоянно, а при щелчке мышью на соответствующий элемент QListView и при подаче сигнала QAbstractItemModel::dataChanged. Следовательно, если вы хотите, чтобы представление прочитало новые данные, нужно отправить этот сигнал.

emit dataChanged(index(0, 0), index(rowCount(), columnCount()));

Этот код заставит представление полностью перечитать все данные. Если нужно обновить только определённый участок данных, подставьте соответствующие индексы "правый-верхний" и "левый-нижний".

Answer 2

На сколько я понимаю непосредственно метод data вызывает не само представление, а делегат. Вы можете унаследовать свой собственный делегат от QAbstractItemDelegate или QStyledItemDelegate. И установить его в представление при помощи метода QAbstractItemView::setItemDelegate.

PS: Спасибо разработчикам Qt за наше счастливое детство соблюдение S.O.L.I.D.

READ ALSO
Как выводить шрифт Wingdings?

Как выводить шрифт Wingdings?

Дело в том, что требуется вывод текста шрифтом "Wingdings"В Code::Blocks этот шрифт отображается криво

320
Как обрабатывать исключения SHCreateDirectoryEx

Как обрабатывать исключения SHCreateDirectoryEx

Как обработать исключение при создание папки?

381
Различные имена типа в объявлении и определении шаблонной функции

Различные имена типа в объявлении и определении шаблонной функции

Недавно столкнулся с такой проблемой как осложнение operator<< для template class, и вот ищя ответ на этот вопрос, перерыл много вопросов на английском...

262
zero-initialization и memset в конструкторе

zero-initialization и memset в конструкторе

Аналогичны ли два этих конструктора?

304