Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Torvald от Ноябрь 04, 2020, 18:00



Название: QTreeView - сложные элементы и отдельный редактор [РЕШЕНО]
Отправлено: Torvald от Ноябрь 04, 2020, 18:00
Почитал про QTreeView, почти во всех примерах используются простенькие итемы на одно текстовое поле с соответствующим редактором в делегате. А вот как реализовать несколько сложных делегатов с постоянным отображением подвиджетов и отдельным редактором для них - не понятно. Объясню подробнее, на примере слоёв в фотошопе:
Слои - https://ibb.co/LxKhLdZ
Редактор (открывается по дабблклику) - https://ibb.co/Vjs6Grf

То есть в понятиях Qt нужно сделать как минимум два делегата - итем, отображающий сам слой (с именем, икнокой блокировки, маской и тд) и итем, отображающий группу слоёв (иконка с папкой, стрелочка, имя и тд).
Как это сделать? Как запихать в один QTreeView два делегата? Или это как-то делается в одном делегате? Ну, например, создается нужный виджет в зависимости от роли?
Видел стандартный пример со звёздами, но там отрисовка была в переопределенном методе paint, но не рисовать же все виджеты вручную? Можно ли как-то установить готовый класс виджета для отображения? И отдельное окно для редактирования?

То есть в идеале хотелось бы чтоб итем отображал всё вышеперечисленное, а по двойному клику на надписи - редактировалась сама надпись (прямо на итеме), по двойному клику в другом месте - открывался полноценный редактор слоя.


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Racheengel от Ноябрь 05, 2020, 00:10
Мне кажется, что там каждый айтем - это не делегат, а отдельный виджет с описанным функционалом.
Я бы именно так и делал.


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Torvald от Ноябрь 07, 2020, 19:36
ну вот да, отдельный виджет. А как его использовать в качестве элемента?


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Igors от Ноябрь 08, 2020, 12:55
ну вот да, отдельный виджет. А как его использовать в качестве элемента?
См QTreeWidget::setItemWidget
Правда подразумевается что слоев будет "не так уж много" (на 1000 будет тормозить)


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Torvald от Ноябрь 08, 2020, 16:18
На сколько я знаю QTreeWidget не подразумевает изменение виджетов в итемах. А в моем примере виджет изменяется - меняются миниатюра, имя, значки, цвет и тд.


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Igors от Ноябрь 08, 2020, 17:09
На сколько я знаю QTreeWidget не подразумевает изменение виджетов в итемах. А в моем примере виджет изменяется - меняются миниатюра, имя, значки, цвет и тд.
Вставленный виджет - самый обычный, редактировать никто не запрещает. Правда потом надо найти строку/столбец, но это мелочи (ну хотя бы QHash)


Название: Re: QTreeView - сложные элементы и отдельный редактор
Отправлено: Torvald от Ноябрь 08, 2020, 17:18
Понял, спасибо, тогда это то что нужно