Название: QModelIndex из QStandardItemModel в QSortFilterProxyModel Отправлено: ruzik от Август 24, 2012, 21:53 Здравствуйте, есть такой код, который добавляет новый элемент:
Код: //Create new item _seacrhModel - есть наследник QSortFilterProxyModel. Ни в одном из наследников используемые методы НЕ переопределялись. sourceFolderIndex - индекс элемента-родителя для создаваемого элемента. А ошибка вот в чем: Если мы ничего не ищем(в модель поиска забита пустая строка), то код работает нормально и оба индекса валидны, но если мы что-то ищем, то создается новый элемент, его индекс вычисляется нормально, но вот индекс поисковой модели(_searchModel->mapFromSource(sourceIndexOfNewItem);) вычисляется неправильно(возвращается просто невалидный индекс). Название: Re: QModelIndex из QStandardItemModel в QSortFilterProxyModel Отправлено: fte от Август 24, 2012, 22:41 _sourceModel->insertRow(_sourceModel->rowCount(sourceFolderIndex), sourceFolderIndex);
is true ? Название: Re: QModelIndex из QStandardItemModel в QSortFilterProxyModel Отправлено: ruzik от Август 24, 2012, 23:02 Да этот метод возвращает true при любом раскладе
Название: Re: QModelIndex из QStandardItemModel в QSortFilterProxyModel Отправлено: ruzik от Август 25, 2012, 18:47 Хм какая-то фигня выходит:
Проверил все это в релизе выходит так как написал, в режиме отладке так как написал, поставил точку останова и прошелся вычислилось оба индекса неправильно(при том что в поиске забита нулевая строка), и все время пишет это в лог: (Internal error: pc 0x0 in read in psymtab, but not in symtab.) Но тем не менее это строчка: _sourceModel->insertRow(_sourceModel->rowCount(sourceFolderIndex), sourceFolderIndex); все равно выдает true, а на выходе получилось что на каждую такую строку в логе создался элемент в модели. Название: Re: QModelIndex из QStandardItemModel в QSortFilterProxyModel Отправлено: ruzik от Август 25, 2012, 19:00 Теперь вообще раз на раз не приходиться, проделал тоже самое с точкой останова те же лишние элементы, но теперь хотя бы индексы вычислились нормально.
Если как-то поможет вот весь код метода: Код: void RizekFaster::addItem() |