Название: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: KADABRA от Сентябрь 16, 2008, 01:32 Пытаюсь реализовать отображение в QTreeView древовидной модели (класс наследуется от QAbstractItemModel) с подгрузкой вложенных элементов при раскрытии узла. Но QTreeView при раскрытии узла сначала отображает его, а уже потом вызывает fetchMore у модели - из за этого содержимое узла появляется только при втором открытии.
Не пойму такой логики - это в Qt бага или особенность какая? Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: ритт от Сентябрь 16, 2008, 05:11 давай упрощённый код твоей модели
Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: KADABRA от Сентябрь 16, 2008, 10:39 Модель
Код Класс DObject представляет ноду дерева - имеет ссылки на чайлдов, парента и хранит свои данные. Вот при раскрытии узла Model::rowCount вызывается до Model::fetchMore - соответственно никаких чайлдов тогда в узле нету. По коду QTreeViewPrivate::expand так оно и есть - model->fetchMore(index) вызывается в самом конце. Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: Barmaglodd от Сентябрь 16, 2008, 11:43 А в fetchMore() сделать вставку нодов через beginInsertRows endInsertRows не пробовал?
Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: ритт от Сентябрь 16, 2008, 14:13 ну, правльно. разворачивается нода - у тебя спрашивают - "сколько там строк?". ты отвечаешь - "0". хорошо, 0 - так 0. затем спрашивают - "а ещё есть?". ты - "да, есть - вот возьмите 50". "хорошо, возьму. только ты обнови меня". а ты - "ну уж нет. я тебе сказал 50 - само обновляйся"...
Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: KADABRA от Сентябрь 16, 2008, 23:51 ну, правльно. разворачивается нода - у тебя спрашивают - "сколько там строк?". ты отвечаешь - "0". хорошо, 0 - так 0. затем спрашивают - "а ещё есть?". ты - "да, есть - вот возьмите 50". "хорошо, возьму. только ты обнови меня". а ты - "ну уж нет. я тебе сказал 50 - само обновляйся"... Да, я такой ;DСпасибо, понял. Посылаю в fetchMore сигнал layoutChanged() - теперь обновляется как надо. Но всё-таки, по моему, логчнее было бы если сначала вызывался fetchMore, а уже потом rowCount. Название: Re: QAbstractItemModel::fetchMore, rowCount и QTreeView Отправлено: ритт от Сентябрь 17, 2008, 00:17 советую посмотреть код инкрементальных моделей (например, QSqlQueryModel для случаев, когда драйвер не поддерживает QuerySize) - подобные "светлые" мысли сами собой пройдут...
|