Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Igors от Май 29, 2018, 08:33



Название: Часть дерева
Отправлено: Igors от Май 29, 2018, 08:33
Добрый день

Есть такое дерево

Цитировать
Объект 1     
     Трансформации
           Позиция           
                X               
                Y               
                Z               

           Угол X             
           Угол Y             
           Угол Z             
...
     Материал
        Индекс преломления
        Цвет
              R
              G
              B
.....

Объект 2             
....
Отобразить все дерево (целиком) - без проблем.  Но вот в одном окне нужно показать не все, а только те айтемы что юзер указал, это могут быть только листья дерева. Напр он может отобрать
Цитировать
Объект 1 -> Позиция -> X
Объект 1 -> Угол Y
Объект 1 -> Индекс преломления
и.т.д
Но напр выбор "Объект 1 ->  Материал" недопустим, это не лист.

Вопрос: как удачно показать такую "выкопировку из дерева" ? Ну "обгрызаное дерево"  (т.е. тупо копировать всю струкуру и удалить пустые ветки) точно нехорошо. Поэтому, не долго думая, я сделал как таблицу в 2 колонки (хотя все равно юзаю QTreeWidget), т.е. так
Цитировать
Объект 1 | Позиция_X
Объект 1 | Угол Y
Объект 1 | Индекс преломления
Ну тоже не блеск. Имена объектов не уникальны, напр есть 100 "Объект 1" и неясно что к чему. Также приходится извиваться чтобы склеить  "Позиция_X".

И еще - внутри объектов отобранные айтемы должны следовать в том же порядке что и в полном дереве. А вот сами объекты - в порядке их добавления в данное окно.

Спасибо


Название: Re: Часть дерева
Отправлено: zhbr от Май 29, 2018, 10:51
если бы порядок объектов нужен был бы как в основном дереве, то я бы отнаследовался от QSortFilterProxyModel и реализовал бы метод filterAcceptsRow(). в любом случае думаю нужно смотреть в сторону проксимоделей.