Russian Qt Forum

Qt => Model-View (MV) => Тема начата: andrew.k от Июль 23, 2012, 14:29



Название: [Решено] Сделать expandable
Отправлено: andrew.k от Июль 23, 2012, 14:29
Нужно, чтобы некоторые элементы в древовидной модели имели значок разворачивания (плюсик).
А по его нажатию уже происходит подгрузка дочерних элементов.
Т.е. на сервере элементы есть, но они еще не подгружены в модель, а подгрузить их надо, только после разворачивания элемента.

Как это сделать?


Название: Re: Сделать expandable
Отправлено: Пантер от Июль 23, 2012, 14:34
hasChildren должно вернуть true.


Название: Re: Сделать expandable
Отправлено: andrew.k от Июль 23, 2012, 14:42
hasChildren должно вернуть true.
Спасибо, че-то лопухнулся, не заметил :)


Название: Re: Сделать expandable
Отправлено: Akon от Июль 23, 2012, 15:41
Скорее rowCount() для данного парента должно вернуть не ноль, не?


Название: Re: Сделать expandable
Отправлено: andrew.k от Июль 23, 2012, 16:02
Скорее rowCount() для данного парента должно вернуть не ноль, не?
Не. Если rowCount() вернет не ноль, тогда вьюха будет запрашивать данные несуществующих элементов в попытке их отрисовать.
А с hasChildren все хорошо. Корешок появился. Но разворачивать нечего. То что надо)


Название: Re: [Решено] Сделать expandable
Отправлено: Akon от Июль 24, 2012, 08:15
А зачем вьюхе запрашивать дочерние айтемы, если парент свернут? Моя логика была такой: rowCount для парента возвращает не ноль, парент свернут, корешок виден, при раскрытии будет подгрузка дочерних данных. Другими словами, QAbstractItemModel::data() будет для дочерних данных вызвана первый раз при раскрытии парента. Впрочем, я не анализировал сорцы, и вполне вероятно, ошибаюсь. То, что hasChildren виртуальная (базовая реализация как раз опирается на rowCount()) - довод не в пользу моих рассуждений.


Название: Re: [Решено] Сделать expandable
Отправлено: andrew.k от Июль 24, 2012, 10:24
А зачем вьюхе запрашивать дочерние айтемы, если парент свернут? Моя логика была такой: rowCount для парента возвращает не ноль, парент свернут, корешок виден, при раскрытии будет подгрузка дочерних данных. Другими словами, QAbstractItemModel::data() будет для дочерних данных вызвана первый раз при раскрытии парента. Впрочем, я не анализировал сорцы, и вполне вероятно, ошибаюсь. То, что hasChildren виртуальная (базовая реализация как раз опирается на rowCount()) - довод не в пользу моих рассуждений.
вьюха данные захочет сразу, как айтем будет развернут, но их еще нет, они только в этот момент начали загружаться. А загрузка занимает время.
Может этот вариант бы подошел, если бы данные были доступны сразу, по необходимости, например в файле. А так нет.