Я пишу приложение C++, которое использует классы Qt для работы с определенными моделями данных. Для этой цели я унаследовал от QAbstractItemModel
:В Qt как сортировать непосредственные дочерние индексы QModelIndex
// the following is a class that represents the actual data used in my application
class EventFragment
{
....
private:
qint32 address;
QString memo;
QDateTime dateCreated;
QVector<EventFragment*> _children;
....
};
// the following is the model representation that used by my application to display the actual details to the user
class EventModel : public QAbstractItemModel
{
Q_OBJECT
public:
explicit EventModel (QObject *parent = 0);
....
private:
// the following is the root item within the model - I use a tree-like presentation to show my data
EventFragment* _rootFragment;
};
В какой-то момент мне нужен был сортировки/вариант фильтра в моем приложении, поэтому я создал класс, который наследуется от QSortFilterProxyModel
class EventProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit EventProxyModel (QObject *parent = 0);
...
public:
// I had to add my custom implementation in the 'lessThan' method to achieve a
// more complex sort logic (not just comparing the actual values but using
// additional conditions to compare the two indexes)
virtual bool lessThan (const QModelIndex & left, const QModelIndex & right) const;
...
};
Для достижения сортировки, я использовал метод по умолчанию QSortFilterProxyModel::sort()
(я еще не переопределял его в классе моей прокси-модели) и какое-то время он работал.
В какой-то момент я заметил, что фактический метод QSortFilterProxyModel::sort()
сортирует всю модель и что мне нужно, чтобы сортировать только ближайшие дети определенного индекса.
Я попытался переопределить метод sort()
класса EventModel
, но через некоторое время понял, что QSortFilterProxyModel::sort()
не имеет к нему никакого отношения. С другой стороны, я не уверен, как правильно упорядочить индексы таким образом, чтобы представление, отображающее модель, не разбилось.
Я думаю, что должен быть способ сортировать только непосредственных детей определенного QModelIndex
, но я еще не нашел его.
Есть ли какой-либо учебник/пример, который демонстрирует возможное решение для моего случая или некоторые рекомендации о том, как это сделать?
С уважением