Название: [Решено] Сделать 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()) - довод не в пользу моих рассуждений. вьюха данные захочет сразу, как айтем будет развернут, но их еще нет, они только в этот момент начали загружаться. А загрузка занимает время.Может этот вариант бы подошел, если бы данные были доступны сразу, по необходимости, например в файле. А так нет. |