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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView - сложные элементы и отдельный редактор [РЕШЕНО]  (Прочитано 5176 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« : Ноябрь 04, 2020, 18:00 »

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

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

То есть в идеале хотелось бы чтоб итем отображал всё вышеперечисленное, а по двойному клику на надписи - редактировалась сама надпись (прямо на итеме), по двойному клику в другом месте - открывался полноценный редактор слоя.
« Последнее редактирование: Ноябрь 08, 2020, 17:19 от Torvald » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Ноябрь 05, 2020, 00:10 »

Мне кажется, что там каждый айтем - это не делегат, а отдельный виджет с описанным функционалом.
Я бы именно так и делал.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #2 : Ноябрь 07, 2020, 19:36 »

ну вот да, отдельный виджет. А как его использовать в качестве элемента?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Ноябрь 08, 2020, 12:55 »

ну вот да, отдельный виджет. А как его использовать в качестве элемента?
См QTreeWidget::setItemWidget
Правда подразумевается что слоев будет "не так уж много" (на 1000 будет тормозить)
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #4 : Ноябрь 08, 2020, 16:18 »

На сколько я знаю QTreeWidget не подразумевает изменение виджетов в итемах. А в моем примере виджет изменяется - меняются миниатюра, имя, значки, цвет и тд.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 08, 2020, 17:09 »

На сколько я знаю QTreeWidget не подразумевает изменение виджетов в итемах. А в моем примере виджет изменяется - меняются миниатюра, имя, значки, цвет и тд.
Вставленный виджет - самый обычный, редактировать никто не запрещает. Правда потом надо найти строку/столбец, но это мелочи (ну хотя бы QHash)
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #6 : Ноябрь 08, 2020, 17:18 »

Понял, спасибо, тогда это то что нужно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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