Название: QFileSystemModel-QSortFilterProxyModel-QTreeView - sigsegv Отправлено: jasmine от Июнь 12, 2014, 12:53 Всем доброго дня.
Я в Qt новичок...Пишу на с++/Qt 5.2.1. Уже неделю не могу разобраться с одной проблемой, может кто подскажет, как решить... У меня есть исходная_модель-прокси_модель-тривью. В виде дерева отображается вся файловая система, начиная с указанного абс.пути. Дерево строится после нажатия на кнопку "перестроить". В исходной модели реализован один фильтр, с ним все нормально. В прокси-модели еще два, через переопределение bool filterAcceptsRow() const; Код: bool FilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const Собственно правила фильтрации указаны в filterAcceptsRowItself(). Функция bool filterFileSize() принимает строку с размером, парсит ее и возвращает true, если файл удовлетворяет фильтру. Тут все тоже работает корректно... Проблема возникает на этапе передачи индекса в представление. Передаю так: Код: filterModel->setSourceModel(treemodel); Если после фильтрации в модели есть данные, то все отлично. Но как только фильтрации не удовлетворяет ни один файл, происходит какая-то неведомая...чудо: 1) либо модель отображается пустой (как и должна, собственно - фильтрация-то вернула false), 2) либо отображается иконка каталога "/" (я так понимаю, это значит, что индекс потерялся или что-то вроде того) Если первый случай, то после попытки изменить значение фильтра так, чтобы в модель попали данные, программа вылетает. причем не на моих функциях а на цикле exec(), где-то на ассемблерных командах при попытке mov что-то куда-то. Если второй случай, то после повторного нажатия на кнопку "перестроить дерево", есть шанс, что все-таки отобразятся верные данные. Может кто подскажет, как мне не терять этот гребаный индекс? Заранее спасибо. |