Странное поведение QTreeWidgetItem::removeChild |
Здравствуйте, гость ( Вход | Регистрация )
Странное поведение QTreeWidgetItem::removeChild |
chereppiter |
18.12.2012, 10:56
Сообщение
#1
|
Студент Группа: Участник Сообщений: 30 Регистрация: 12.11.2012 Пользователь №: 3595 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть функция построения дерева (QTreeWidget), в которой для каждого элемента верхнего уровня рекурсивно вызывается функция добавления отпрысков:
void addChilds(QTreeWidgetItem* item, int id) По возвращению из рекурсивной addChilds, если у текущего чаилда детей нет, то он удаляется. Ситуация такая: на одной из итераций цикла к item был добавлен child (и не был удалён, т.к. у него тоже есть дети). На одной из последующих итераций создаётся child, для которого потом childCount оказывается 0, поэтому он удаляется (item->removeChild(child)). При этом почему-то вместе с этим отпрыском удаляется и тот, который был добавлен на одной из предыдущих итераций. Проблема решается исключением из вышеприведённого кода строчки: item->removeChild(child); Т.е. если удаление выглядит так: if (!child->childCount()) { delete child;} , то всё работает нормально. Кто-нибудь знает причину этого загадочного явления? |
|
|
Алексей1153 |
20.12.2012, 6:56
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
chereppiter, тогда прикрепи проект (удали лишнее), чтобы я смог повторить глюк у себя, тогда я смогу в отладчике точно посмотреть, что происходит.
Не понимаю, в чём неправильность моего подхода к дереву. Строится оно вполне логично и правильно, если не использовать removeChild. Зачем мне дополнительная прослойка в виде stl-ного словаря, если мне это дерево нужно только для того, чтобы его отобразить в виджете и больше ни для чего? 1) неправильность подхода - не ООП , элементы дерева (виджета) раскиданы неизвестно где. 2) какая ещё прослойка ? Ты всё то же самое создаёшь. Только в мапе все указатели хранятся стройно и доступно 3) ошибка в том, что ты пытаешься одновременно отладить две вещи, при этом точно не знаю, какая из них не работает - то ли массив, то ли виджет. Я же предлагаю построить дерево без участия виджета (вещь остаётся одна), а потом уже разбираться с деревом-виджетом. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 2:22 |