Russian Qt Forum
Ноябрь 23, 2024, 04:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Expanding delegate  (Прочитано 4139 раз)
mutineer
Гость
« : Март 26, 2012, 00:23 »

Привет. Кто-нить сталкивался с ListView, у которого айтемы умеют разворачиваться/сворачиваться по клику?
Стандартный пример Expanding Delegate ListView Example не подходит, так как:
  • сворачивается только по клику на сам развернутый элемент. А надо чтобы по клику на свернутый элемент он разворачивался, а предыдущий развернутый сворачивался
  • состояние развернут/свернут хранится в самом делегате, что не подходит, так как делегат уничтожается при уходе за границы экрана

текущий рабочий вариант - проперти expandedIndex у листа, и два состояния у делегата, зависящих от того, равен ли индекс самого делегата этому expandedIndex. Но этот вариант мне не очень нравится (делегат зависит от проперти листа), а другого придумать пока не могу. Может кто поможет?
Записан
Bepec
Гость
« Ответ #1 : Март 26, 2012, 07:00 »

Эм... Я не сильно то и углублялся в делегаты, но чем не устраивает самописная модель?
Список пар <значение, количество подэлементов> и переменная lastExpanding.

При нажатии на "плюсик/уголок/разворачиватель" сворачивать lastExpanding, и присваивать ему текущее значение, если есть подъэлементы.

offtop: Напомни пожалуйста, размер ячейки задаётся в делегате каким параметром?
Записан
mutineer
Гость
« Ответ #2 : Март 26, 2012, 10:07 »

Хранить состояние развернут/свернут в модели? ну это не модели дело знать кто там на экране развернут, а кто свернут. К тому же, а если вьюх будет  две? получится ерунда

offtop: в qml размер делегата задается width, height самого делегата
Записан
Bepec
Гость
« Ответ #3 : Март 26, 2012, 10:30 »

Хм. Если 2 и больше.

Не вижу простых решений, но вот моё мнение:

Если не модель должна знать о том, кто там на экране свёрнут - развёрнут, то тогда всё нужно(а точнее другого способа нет) сосредоточить в делегате. А тут большое НО. Он тоже незнает о том, кто свёрнут - развёрнут. И вью будет незнать кто свёрнут - развёрнут.

Если же пойти по примеру QTree, то там именно модель знает, кто свёрнут/развёрнут. Только тут минус, что я не интересовался механизмом разделения на несколько вью.
Записан
BRE
Гость
« Ответ #4 : Март 26, 2012, 10:49 »

Хранить состояние развернут/свернут в модели? ну это не модели дело знать кто там на экране развернут, а кто свернут. К тому же, а если вьюх будет  две? получится ерунда
А ты заведи еще одну специализированную модель (ItemExpandedModel), по аналогии с QItemSelectionModel, которая будет хранить и управлять развернутыми группами для каждого view.
Записан
mutineer
Гость
« Ответ #5 : Март 26, 2012, 11:05 »

Хранить состояние развернут/свернут в модели? ну это не модели дело знать кто там на экране развернут, а кто свернут. К тому же, а если вьюх будет  две? получится ерунда
А ты заведи еще одну специализированную модель (ItemExpandedModel), по аналогии с QItemSelectionModel, которая будет хранить и управлять развернутыми группами для каждого view.

Идея интересная. А как эту дополнительную модель всунуть в ListView ?
Записан
BRE
Гость
« Ответ #6 : Март 26, 2012, 11:10 »

Идея интересная. А как эту дополнительную модель всунуть в ListView ?
Сделать свой класс-наследник от QTreeView/QListView. Улыбающийся
Записан
mutineer
Гость
« Ответ #7 : Март 26, 2012, 11:11 »

Идея интересная. А как эту дополнительную модель всунуть в ListView ?
Сделать свой класс-наследник от QTreeView. Улыбающийся

А вот это уже печалька. В QML нету TreeView и писать собственную вьюху QML-ную не хотелось
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.