Здравствуйте, гость ( Вход | Регистрация )
|
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;} , то всё работает нормально. Кто-нибудь знает причину этого загадочного явления? |
|
|
|
![]() |
|
chereppiter |
20.12.2012, 15:53
Сообщение
#2
|
|
Студент ![]() Группа: Участник Сообщений: 30 Регистрация: 12.11.2012 Пользователь №: 3595 Спасибо сказали: 0 раз(а) Репутация: 0
|
Создал отдельный маленький тестовый проект. Глючная строчка кода закомментирована.
Прикрепленные файлы
|
|
|
|
chereppiter Странное поведение QTreeWidgetItem::removeChild 18.12.2012, 10:56
Алексей1153 в поставленном вопросе много неизвестного:
1) чем ... 18.12.2012, 23:54
chereppiter 1) Чтобы было более понятно, приведу полный текст ... 19.12.2012, 11:00
Алексей1153 chereppiter, что делает этот метод, можно прочитат... 19.12.2012, 14:37
chereppiter Не понимаю, в чём неправильность моего подхода к д... 19.12.2012, 17:55
Алексей1153 chereppiter, тогда прикрепи проект (удали лишнее),... 20.12.2012, 6:56
Алексей1153 в общем, вскрытие показало, что чукча умер от вскр... 21.12.2012, 0:25
iReset Насколько я понял при беглом просмотре исходников,... 21.12.2012, 9:13
Алексей1153 iReset, вообще, забавная ситуация - указываем конк... 21.12.2012, 11:10
iReset Цитата(Алексей1153 @ 21.12.2012, 12:10) i... 21.12.2012, 12:30
chereppiter Ну вот, совместными усилиями докопались до истины.... 21.12.2012, 11:26![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 15.12.2025, 0:35 |