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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Размеры последнего itemWidget в QTreeWidget  (Прочитано 5741 раз)
bess
Гость
« : Октябрь 12, 2009, 16:31 »

Надо сделать компонент дерево с несколькими вложенными уровнями таких же деревьев


Отнаследовался от QTreeWidget, поддеревья сидят как itemWidget
Все бы ничего, кроме заморочки с ресайзингом родительского и дочерних деревьев:
  при экспанде любого айтема, кроме последнего, дочернее дерево растягивается под содержимое, как и надо.
  последнее же поддерево не меняет свой исходный размер.. поменяет, только если свернуть, а потом опять развернуть родительский узел.

Можно делать фиктивные _последние_ итемы, а потом их не рисовать - но это как-то некруто )

Собственно, вот.. уже задолбался =) помогите, плиз..

Код:
        // код, который вызывается на itemExpanded() и itemCollapsed()
        // как сделать проще обновление, не понял
        QModelIndex i1 = indexFromItem( topLevelItem(0) )
     , i2 = indexFromItem( topLevelItem(topLevelItemCount()-1) );
dataChanged( i1, i2 );
updateGeometries();

        // дальше находим родительское дерево
TComboTreeItem *item = dynamic_cast<TComboTreeItem*>(topLevelItem(0))
        , *parent = item->customParent;

if( parent )
dynamic_cast<TComboTree*>(parent->treeWidget())->repaintFromParent();

sizeHint() вроде не косячит, размеры правильно считаются

проект под msvc2008, мож глянет кто)
« Последнее редактирование: Октябрь 12, 2009, 16:42 от bess » Записан
Makss
Гость
« Ответ #1 : Октябрь 12, 2009, 18:22 »

эээ... а можно поинтересоваться, зачем ет вам такой изврат? вы уж извените конечно за ето слово))
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #2 : Октябрь 12, 2009, 18:26 »

эээ... а можно поинтересоваться, зачем ет вам такой изврат? вы уж извените конечно за ето слово))
+500, изврат он и в Африке изврат...
пс. Чую запах дельфи....
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
bess
Гость
« Ответ #3 : Октябрь 12, 2009, 20:52 »

рисовать несколько табличек с разными хедерами

да и, по идее, со стилями более-менее нормально должно выглядеть

не, дельфи непричем =)
« Последнее редактирование: Октябрь 12, 2009, 21:11 от bess » Записан
CroCIV
Гость
« Ответ #4 : Октябрь 13, 2009, 08:43 »

НЕТ ПОКА ИЗВРАТ
дерево деревьев = дерево, вот еслиб очередной ветвью дерева была бы какая то незамысловатая компонента, например QColorBox - другой вопрос, вообще делается не сложно, а это изврат ))
Записан
bess
Гость
« Ответ #5 : Октябрь 13, 2009, 14:06 »

да вроде уже все сделано, и так не сложно.. а что исправить - хз =\
Записан
spirit
Гость
« Ответ #6 : Октябрь 13, 2009, 14:34 »

НЕТ ПОКА ИЗВРАТ
дерево деревьев = дерево, вот еслиб очередной ветвью дерева была бы какая то незамысловатая компонента, например QColorBox - другой вопрос, вообще делается не сложно, а это изврат ))

а почему собственно изврат? очень даже ничего если рассватримать подчиненные структуры например в базах данных.
вроде в Accesse такая хрень есть.
Записан
MelkorBSD
Гость
« Ответ #7 : Февраль 11, 2010, 17:04 »

Добавил после
Код:
QModelIndex i1 = indexFromItem( topLevelItem(0) )
                , i2 = indexFromItem( topLevelItem(topLevelItemCount()-1) );
dataChanged( i1, i2 );
updateGeometries();

еще и
Код:
for (int i=0;i<topLevelItemCount();i++)
  if (topLevelItem(i)->childCount()>0)
  {
    i1 = indexFromItem(topLevelItem(i)->child(0));
    i2 = indexFromItem(topLevelItem(i)->child(topLevelItem(i)->childCount()-1));
    dataChanged( i1, i2 );
    updateGeometries();
  }

Понятно, что надо это сделать красивее, но принцип думаю ясен - надо выполнить dataChanged и updateGeometries не только между корневыми элементами дерева, но и между всеми остальными.

PS: Хотя я думаю за давностью данной темы Вы этот ответ уже нашли.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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