2013-06-13 1 views
0

Я надеюсь, что кто-то может оказать некоторую помощь с проблемой, которую я наблюдаю с сигналом dataChanged. После испускания этого сигнала с ограниченным диапазоном ячеек модель данных, по-видимому, вызывает данные (...) на каждой отдельной видимой ячейке.Qt dataChanged signal - не используя предоставленный диапазон ячеек

Например:

QModelIndex bl = index(1, 1); 
QModelIndex tr = index(1, 5); 
emit dataChanged(bl, tr); 

Если 5 строк и 5 столбцов видимы, этот сигнал будет вызывать 25 вызовов к данным(), в отличие от ожидаемого 5.

Чтение документации Qt, Я понимаю, что нет никаких гарантий только называть 5 раз, но мне любопытно, есть ли приемлемый способ большей части времени, минимизирующий диапазон.

Любые идеи?

ответ

2

Нет ограничений на количество звонков data(). Это полностью зависит от реализации представления. Например, иногда я замечаю, что представление вызывает модель data(), когда представление получает фокус, без каких-либо сигналов dataChanged, без какого-либо другого взаимодействия вообще. Итак, вы должны быть готовы к этому. Если вы хотите контролировать счет data(), единственный способ - реализовать свой собственный вид.

0

data() вызывается для получения данных, хранящихся в разных Qt :: ItemDataRole (например, Qt :: DecorationRole и Qt :: DisplayRole). data() будет вызываться несколько раз для одного и того же элемента. Таким образом, это нормально, что у вас больше вызовов, чем измененных элементов.

+0

должен был включить это в мое описание, но у меня есть украшение модели выключено. Я только получаю данные() для DisplayRole. – tinkertime

 Смежные вопросы

  • Нет связанных вопросов^_^