Название: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: dr_Begemot от Апрель 15, 2009, 15:42 Есть QTreeView с работающей моделью, в узлах дерева стоят подписи. В некоторых случаях программа изменяет стоку в подписи, при этом дерево сворачивается.
Как сделать так, чтобы дерево не сворачивалось, а оставалось в таком же состоянии, в каком его раскрыл пользователь и только изменялась строка в нужном узле? Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: EhTemka от Апрель 15, 2009, 20:14 Подпись - это текст в ячейке?
Версия Qt какая? У меня 4.5.0. Дерево, при изменении данных в модели не сворачивается. (да и в предыдущих не сворачивалась, может что-то с реализацией модели?) Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: kirill от Апрель 16, 2009, 05:43 Там скорее всего все дерево загружается заново при изменении одной лишь надписи.
Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: drsm от Апрель 16, 2009, 09:30 там скорее всего вызывается, при изменении, model->reset(),
вместо emit layoutChanged(). Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: dr_Begemot от Апрель 16, 2009, 11:54 там скорее всего вызывается, при изменении, model->reset(), вместо emit layoutChanged(). Да-да, именно так) Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: dr_Begemot от Апрель 16, 2009, 12:03 там скорее всего вызывается, при изменении, model->reset(), вместо emit layoutChanged(). гм... итак, при изменении текста вызывать emit layoutChanged(), при добавлении узла то же самое (проверил, работает), а вот при удалении выбранного узла со всеми его потомками нужен именно reset()? у меня, если я при удалении вызываю emit layoutChanged() приложение завершается ошибкой... Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: drsm от Апрель 16, 2009, 12:46 есть у модели так называемый persistentIndexList() который хранит закешированные вьюхами или кем-то еще индексы модели.
если добавлять/удалять элементы используя begin/endInsertRows() и begin/endRemoveRows(), то данный список пересчитывается автоматически и сигналы эмитятся тоже. если невозможно использовать эти функции то алгоритм такой: 1. emit layoutAboutToBeChanged(); 2. сохранить данные по индексам из persistentIndexList() 3. добавить/удалить элементы 4. пересчитать индексы в persistentIndexList() используя данные из 2. см changePersistentIndex() 5. emit layoutChanged(); Название: Re: Как сделать чтобы дерово в QTreeView не сворачивалось Отправлено: johnny от Май 06, 2009, 15:41 если невозможно использовать эти функции то алгоритм такой: ... Громадное спасибо за подробные разъяснения, из доки лично я этого нифига не понял. |