Название: Тормозит иерархическая модель построенн Отправлено: Delphist от Август 21, 2008, 13:54 Есть иерархическая модель наследуемая от QAbstractItemModel (это библиотека QT), построение модели происходит на основе моего иерархического класса типа:
Код
Этот класс передается по указателю в модель, соответственно когда происходят изменения в CMyClass генерятся сигналы. На эти сигналы ставяться слот модели, который всего лишь делает. Код Работает, но возникла еще одна проблема, а как тогда должен выглядить indByNode, если генерится событие onNodeDestroy(CMyClass& node, int col) т.е. удаляется элемент, в качестве node здесь передается удаляем элемент. Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: Tonal от Август 21, 2008, 17:35 С удалением просто последовательность нужно другую.
Сначала генерим сигнал об удалении, а потом реально удаляем данные. Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: Delphist от Август 21, 2008, 21:57 С удалением просто последовательность нужно другую. Что значит последовательность другую?Сначала генерим сигнал об удалении, а потом реально удаляем данные. Так у меня так и делается но так надо потом (после удаления) сообщить об этом представлению (TreeView в данном случае) перерисоваться если вызывать reset то это слишком наклодно, поэтому я вызываю emit dataChanged ток не знаю индексы какие?Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: xintrea от Август 21, 2008, 22:40 Цитировать Так у меня так и делается но так надо потом (после удаления) сообщить об этом представлению (TreeView в данном случае) перерисоваться если вызывать reset то это слишком наклодно, поэтому я вызываю emit dataChanged ток не знаю индексы какие? Я так понял, что вместо сигналов при добавлении/удалении лучше пользоваться конструкциями beginInsertRows(), endInsertRows() и т.д. Вот пример - у меня внутреннее представление списка, унаследованного от QAbstractListModel, лежит в списке QList<QString> table. Когда я добавляю в конец списка новую запись, я делаю таг Код: // Начинаются добавляться данные А когда удаляю запись, делаю таг (i - 'это номер записи которую надо удалить) Код: // Начинается удаление записи То есть идея такая - указываем какая область меняется, потом эти области будут автоматом перерисованы видом. Так как это будет происходить с вызовом метода data(), который в моем случае из внутреннего представления (из списка table) возвращает запрошенный элемент, то вид как раз и обновится в соответсвии с изменениями, вносимыми в внутренне представление даннх. Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: Delphist от Август 22, 2008, 12:17 нет. дело в том что у меня класс CMyClass генерит сигнал о том, что с ним происходит на разных этапах, например, происходит удаления child'a тогда, генериться сигнал childDestroyed, далее модель ставит на этот сигнал слот onNodeDestroy(CMyClass& node, int col) и ловит этот сигнал. теперь вопрос что я должен написать здесь чтобы обновлялось не все дерево а только та часть которая дейстительно нуждается в этом, а иначе появляются тормоза
Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: Tonal от Август 22, 2008, 12:43 Вызвать соответствующие begin*Rows(), end*Rows() для индекса удаляемого элемента.
Ты ассистент читать будешь, или в форумах канючить предпочитаешь? >:( Название: Re: Тормозит иерархическая модель построенная на QAbstractItemModel Отправлено: Delphist от Август 26, 2008, 15:49 Вызвать соответствующие begin*Rows(), end*Rows() для индекса удаляемого элемента. Как выяснилось в мою модель от класса CMyClass приходит только сигнал, nodeBeforeDestroyedТы ассистент читать будешь, или в форумах канючить предпочитаешь? >:( для обновления своего TreeView в модели, я делаю так: Код Приведенный мною код не работает должным образом (для понимания необходимо прочитать коменнтарии в приведенном коде. Вот я думаю может надо в виртуальных функциях: index, parent и.т. ввести признак по markDeleted Что значит "код не работает должным образом" - происходит следующее, если есть вот такое дерево: root |___child1 |___child2 |___child3 |___child4 |___child5 |``````| |``````|__child51 |``````| |``````|__child52 так вот если скажем child4 помечен на удаление т.е markDeleted == true, то в дереве перестает отображаться не только child4, но и child5 c его детьми. По поводу того, что необходимо учитывать markDeleted, возникает вопрос как его учитывать и в каких виртуальных ф-циях QAbstractItemModel |