crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Тормозит иерархическая модель построенная на QAbstractItemModel (библиотека QT)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Delphist Дата 26.8.2008, 12:24
 
Цитата(Tonal @ 26.8.2008, 12:59) *
Помеченный на удаление не должен учитываться в количестве и должен пропускаться в индексе.
Почему у тебя перестаёт отображаться child5 я не в курсе - видимо где-то ошибка. :)

Мог бы имена этих ф-ций перечислить, я так понимаю
rowcount
index
parent

еще какие-нить?
Tonal Дата 26.8.2008, 11:59
  Помеченный на удаление не должен учитываться в количестве и должен пропускаться в индексе.
Почему у тебя перестаёт отображаться child5 я не в курсе - видимо где-то ошибка. :)
Delphist Дата 26.8.2008, 11:50
 
Цитата(Tonal @ 26.8.2008, 11:09) *
Что значит "код не работает должным образом"? Что происходит то? :)

Раз у тебя есть markDeleted, то естественно отображать такие узлы не нужно и флаг должен учитываться.
Ну и кроме того, может ввести сигнал nodeAfterDestroyed - тогда модель удаления будет точно соответствовать Qt-ёвой. :)

происходит следующее, если есть вот такое дерево:
root
|___child1
|___child2
|___child3
|___child4
|___child5
|``````|
|``````|__child51
|``````|
|``````|__child52
так вот если скажем child4 помечен на удаление т.е markDeleted == true, то в дереве перестает
отображаться не только child4, но и child5 c его детьми.
По поводу того, что необходимо учитывать markDeleted, возникает вопрос как его учитывать и
в каких виртуальных ф-циях QAbstractItem
Tonal Дата 26.8.2008, 10:09
  Что значит "код не работает должным образом"? Что происходит то? :)

Раз у тебя есть markDeleted, то естественно отображать такие узлы не нужно и флаг должен учитываться.
Ну и кроме того, может ввести сигнал nodeAfterDestroyed - тогда модель удаления будет точно соответствовать Qt-ёвой. :)
Delphist Дата 26.8.2008, 9:05
 
Цитата(Tonal @ 21.8.2008, 18:57) *
Ты ассистент открой и погляди. Если что конкретно будет не понятно - спрашивай.

Как выяснилось в мою модель от класса CMyClass приходит только сигнал, nodeBeforeDestroyed
для обновления своего TreeView в модели, я делаю так:
void MyModel::nodeBeforeDestroyed(int nCode, CMyClass &Value)
{
    /*
      CMyClass имеет свойство markDeleted, которое = true если экземляр CMyClass'a помечен на удаление,
      так вот у данного Value.markDeleted==true
    */
    int i = indexOf(Value.getOwner(), &Value);
    QModelIndex idx = indByNode(*Value.getOwner());
    beginRemoveRows(idx, i, i);
    /*
       удалять здесь по настоящему Value через delete нельзя т.к. он удаляется самим классом в нужный момент
       я всего лишь должен не отображать его в TreeView
       */

    endRemoveRows();
}

Приведенный мною код не работает должным образом (для понимания необходимо прочитать коменнтарии
в приведенном коде. Вот я думаю может надо в виртуальных функциях: index, parent и.т.
ввести признак по markDeleted
Tonal Дата 21.8.2008, 17:57
  Ты ассистент открой и погляди. Если что конкретно будет не понятно - спрашивай.
trdm Дата 21.8.2008, 16:42
 
Цитата(Delphist @ 21.8.2008, 14:17) *
Кто-нить может подсказать какими лучше пользоваться защищёнными функциями

лучше пользоваться лучше защишенными.
у тебя талант задавать философские вопросы на программисткую тему :)
Delphist Дата 21.8.2008, 13:17
 
Цитата(Tonal @ 21.8.2008, 13:58) *
Остальные можешь или тоже руками сгенерить, или, лучше, воспользоваться защищёнными функциями, которые не только его сгенерят но и ещё что-то там сделают (см исходники что именно).

Кто-нить может подсказать какими лучше пользоваться защищёнными функциями
Tonal Дата 21.8.2008, 12:58
  Например dataChanged - это сигнал объявленный именно в QAbstractItemModel.
Ты его должен сгенерить (emit dataChanged...) когда данные изменяются.
Остальные можешь или тоже руками сгенерить, или, лучше, воспользоваться защищёнными функциями, которые не только его сгенерят но и ещё что-то там сделают (см исходники что именно). :)
Delphist Дата 21.8.2008, 11:32
 
Цитата(Tonal @ 21.8.2008, 11:31) *
Открой ассистента и посмотри состав сигналов и защищённых функций QAbstractItemModel.
Там очень интуитивные названия и доходчиво написаны пояснения.

Не понял а при чем здесь сигналы QAbstractItemModel
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 23:29