Название: QAbstractItemModel Отправлено: demaker от Сентябрь 04, 2013, 11:08 Пытаюсь понять как работает QAbstractItemModel
Создаю общий абстрактный класс от него идут элементы типа база, станция Запихиваю в базу две станции. Код Не могу понять почему в консоль выводится 8-раз base??? С чем это может быть связанно? Название: Re: QAbstractItemModel Отправлено: Alexandr Az от Сентябрь 04, 2013, 23:28 Да откудаж известно. Может мышка пробежалась, может окно свернул. Другими словами мало данных. Тестовый проект если не лень, посмотрю. Вообще, конечно, модель часто опрашивает некоторые вещи, которые с первого раза логике не поддаются, но creatIndex не замечался в этом.
Название: Re: QAbstractItemModel Отправлено: demaker от Сентябрь 05, 2013, 12:36 Да вот код
Название: Re: QAbstractItemModel Отправлено: Alexandr Az от Сентябрь 06, 2013, 14:32 Повезло тебе, только 8 раз, я даже не сосчитал. Я тут с сам с собой посовещался и пришёл в выводу, надо закомментировать строку qDebug()<<"base", тогда проблема исчезнет. А если серьезно, то неизвестно, судя по стеку вызывает его view, так что будем думать он знает что делать. Модель составлена классически и правильно, ресурсоемкие операции отсутствуют в данном методе, пусть себе вызывает сколько ему хочется. Свернуть - развернуть окно, тоже вызывает. Так что это нормально.
P.S. как красиво пишется код в начале проекта. А потом как всегда, пошло поехало..... Название: Re: QAbstractItemModel Отправлено: Авварон от Сентябрь 06, 2013, 14:37 Метод index(), действительно, вызывается по много раз на каждый чих. Предполагается, что у этого метода константная сложность, и константа невелика (для таблицы всё ясно, там константа фиксирована, для дерева константа - это максимальная глубина дерева).
В любом случае, в индексе не должно быть ресурсоемких операций. Вызвали метод, мы как можно скорее вернули индекс. Всё. Название: Re: QAbstractItemModel Отправлено: Alexandr Az от Сентябрь 06, 2013, 15:59 Метод index(), действительно, вызывается по много раз на каждый чих. Предполагается, что у этого метода константная сложность, и константа невелика (для таблицы всё ясно, там константа фиксирована, для дерева константа - это максимальная глубина дерева). В любом случае, в индексе не должно быть ресурсоемких операций. Вызвали метод, мы как можно скорее вернули индекс. Всё. Я не увидел в модели увеличение для данного метода в зависимости от глубины дерева, возможно, Вы имели в виду "рекусивный" вызов до текущего индекса. Но то такое, меня больше интересует другое. Единственное слабое место в древовидной модели для меня в методе parent(), где используется прямой перебор для нахождения позиции дочернего элемента. Есть ли у Вас опыт по использованию древовидных моделей с бОльшой глубиной и большим кол-вом данных? (оставим вопрос зачем view огромная модель за кадром) |