Доброго времени суток.
Когда сортируешь списки, есть замечательная штука qSort, в которую последним аргументом можно передать лямбда-функцию, и сортировка пойдёт по собственному алгоритму.
У меня есть QTreeView, а в ней модель, унаследованная от QStandardItemModel.
Хочу отсортировать детей в одном из айтемов в модели Дерева.
Но, в методе sortChildren жёстко прописывается порядок сортировки QSortOrder, никаких lessThan и lambda не передашь
. В результате алгоритм сортирует айтемы по алфавиту, а мне надо по величине численных значений. Как это реализовать?
Нашёл, что надо копать вокруг QSortFilterProxyModel, но как сделать сортировку по числовым значениям с помощью этого класса, так и не понял.
Мои неудачные попытки реализовать сортировку:
segmentItem->sortChildren(0,[=](QModelIndex &s1,QModelIndex &s2){
int first = CommonFunctions::getEndAddressPart(s1.data().toString()).toInt();
int second = CommonFunctions::getEndAddressPart(s2.data().toString()).toInt();
return first < second;
});
так не работает.
qSort(segmentItem->child(0),segmentItem->child(segmentItem->rowCount() - 1),[=](SegmentStandardItem *&s1,SegmentStandardItem *&s2){
int first = CommonFunctions::getEndAddressPart(s1->text()).toInt();
int second = CommonFunctions::getEndAddressPart(s2->text()).toInt();
return first < second;
});
так тоже не работает.
segmentItem->sortChildren(0,Qt::AscendingOrder);
так сортирует по алфавиту.
SegmentStandardItem унаследован от QStandardItem
Спасибо.