我正在编写一个 C++ 应用程序,它使用 Qt 类来处理某些数据模型。为此,我继承自QAbstractItemModel
:
// 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
,但我还没有找到。
是否有任何教程/示例可以演示我的案例的可能解决方案,或有关如何做到这一点的一些指导方针?
问候