Название: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vovan1982 от Июнь 16, 2009, 15:32 Привет всем.
Вообщем делаю дерево, использую свою модель унаследованную от QAbstractItemModel для вывода дерева использую QTreeView. Данные беру из таблици в БД, таблица имеет вид (id, parent_id, name). В принципе всё работает номально но есть следующая проблемма: Переопределил removeRows вот код Код
Вот пример дерева: <all> | -----note1 | | | n11 | -----note2 | | | n21 | -----note3 | n31 Если удалять note3 то всё идёт нормально, а вот если удалять note1 то все нижестоящие потомки сворачиваются, тоже при удалении note2, note1 без изменений а note3 сворачивается. Кто нибуть с таким сталкивался, как сделать так чтоб вид дерева после удаления в нём записи не изменялся? Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vdann от Июнь 17, 2009, 16:32 Поясни пожалуйста следующий код =>
Код . ...желательно каждую строку, особенно после "beginRemoveRows(parent, row, row + count - 1);", где ты удаляешь строки с текущей (row), по последнюю (row + count - 1)... Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vovan1982 от Июнь 17, 2009, 18:24 if(!queryDelItem(parentItem->children[row]))
return false; этот кусок удаляет записи напрямую из БД. на него можно не смотреть. Если какуюто запись не удаётся удалить из БД то удаление из модели прерывается. parentItem->children.removeAt(row); а этот удаление из модели. т.к. children у меня это список то после удаления элемента на его место становится сделующий. В результате если повторить эту операцию несколько раз то удалятся несколько подряд стоящих строк, начиная с указанной (Во всяком случае я так понял когда смотрел в ассистанте.) Вот этот код я брал для примера Код
впринципе у меня всёравно больше одной строки удалятся не будет. Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vdann от Июнь 17, 2009, 19:16 >>к понял когда смотрел в ассистанте.)
>>Вот этот код я брал для примера с моей точки зрения это не так.. ..в этом примере в моделе данных StringListModel непосредственно сами данные хранятся в stringList (т.к. это строки), а removeRows(int position, int rows, const QModelIndex &parent) удаляет rows строк с позиции position Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: mugabe от Июнь 18, 2009, 07:21 if(!queryDelItem(parentItem->children[row])) А тут как минимум ты забываешь выполнить endRemoveRows().return false; Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vovan1982 от Июнь 18, 2009, 09:15 с моей точки зрения это не так.. ..в этом примере в моделе данных StringListModel непосредственно сами данные хранятся в stringList (т.к. это строки), а removeRows(int position, int rows, const QModelIndex &parent) удаляет rows строк с позиции position а как было бы правильней? подскажи если не сложно. if(!queryDelItem(parentItem->children[row])) А тут как минимум ты забываешь выполнить endRemoveRows().return false; согласен, не доглядел спасибо, просто у меня ещё небыло ситуаций когдаб это правило срабатывало. Название: Re: Вопрос по TreeView, после удаления потомка все потомки с низу сворачиваются Отправлено: vovan1982 от Июнь 19, 2009, 10:21 Всё заработало.
Полностью переписал модель, за основу взял "examples\itemviews\editabletreemodel". Точнее сама модель практически не изменилать, за исключением нескольких моментов, а вот класс TreeItem(класс дерева) изменился полностью. Так что проблема скорее всего была в кривой реализации класса дерева. Спасибо всем. |