Название: QAbstractItemModel и снова сортировка... Отправлено: patison от Сентябрь 20, 2010, 12:13 Имеется класс, унаследованный от QAbstractItemModel (своя модель). Имеется QTreeView, куда выводится дерево с 4-я столбцами. Необходимо реализовать сортировку по клику на заголовки столбцов. Сама сортировка включена (sortEnabled), однако пока что она не работает.
Насколько я понял, необходимо писать реализацию метода sort(int column, Qt::SortOrder order). Однако я никак не пойму, что и как в этом методе нужно отсортировать. Член класса моей модели есть только один - MyModelItem *rootItem; , который указывает на корень. Подскажите, в какую сторону двигаться что-бы реализовать сортировку? Спасибо. Название: Re: QAbstractItemModel и снова сортировка... Отправлено: Karl-Philipp от Сентябрь 20, 2010, 12:17 QSortFilterProxyModel (http://doc.trolltech.com/4.6/qsortfilterproxymodel.html) вам в помощь :)
Название: Re: QAbstractItemModel и снова сортировка... Отправлено: patison от Сентябрь 22, 2010, 20:41 По-моему то что нужно, однако есть маленькое "но".
В дереве имеются элементы двух типов, причём сначала должен идти первый тип, а после него второй. Когда я сортирую, скажем, по имени элемента, элементы выстраиваются строго в порядке названий, перемешиваясь между собой. Для выстраивания элементов по типам я переопределял setupModelData, и в нём это дело реализовывал. Думаю, что для того что-бы сортировался сначала первый тип элементов, а следом за ним второй тип (т.е. что-бы типы сами не перемешивались) необходимо переопределять какой-то из методов. Только вот какой и каким примерно образом? Название: Re: QAbstractItemModel и снова сортировка... Отправлено: Kolobok от Сентябрь 22, 2010, 20:58 Переопредели
Код: bool QSortFilterProxyModel::lessThan ( const QModelIndex & left, const QModelIndex & right ) const Название: Re: QAbstractItemModel и снова сортировка... Отправлено: patison от Сентябрь 23, 2010, 12:39 Да, то что нужно.
Однако ещё один момент вылез. В моей модели я переопределил метод canFetchMore. Для теста я сделал так что он возвращает всё время true, т.е. у всех элементов по идее должен быть '+' слева от названия. Однако, при использовании QSortFilterProxyModel, все элементы теперь не разворачиваемые. В сам метод canFetchMore вход происходит, однако почему-то возврат true никак не влияет на элементы... Если-же убрать прокси класс между моделью и отображением - то всё прекрасно работает. Как быть?.. Название: Re: QAbstractItemModel и снова сортировка... Отправлено: Kolobok от Сентябрь 23, 2010, 13:18 Может потому, что прокси кэширует элементы и понимает, что его дурят.
Название: Re: QAbstractItemModel и снова сортировка... Отправлено: patison от Октябрь 01, 2010, 13:57 Хм. А это как-то лечится вообще?
Название: Re: QAbstractItemModel и снова сортировка... Отправлено: patison от Октябрь 05, 2010, 15:07 Переопределил canFetchMore в классе прокси (унаследованный от QSortFilterProxyModel), возвращая для всех элементов true. Однако это тоже почему-то не дало никаких результатов... Поистине странно.
|